推荐网址:

https://github.com/nswbmw/N-blog/blob/backup/book/%E7%AC%AC1%E7%AB%A0%20%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E5%8D%9A%E5%AE%A2.md

https://www.cnblogs.com/Darren_code/p/node_express.html

https://www.cnblogs.com/chyingp/p/express-multer-file-upload.html(文件上传multer)

项目github地址

1、工程结构

2、路由控制 :Express封装了http的很多方法

路由句柄(路由中间件):

  next('route')

响应方法:

  res.render:渲染视图模板

  res.redirect:重定向请求
 

3、模板引擎(ejs)

  app.engine()方法

  之前先看看express应用的安装命令:“express -e nodejs-product”,其中的 -e 和 -J 我们一开始已经提到,表示ejs和jade模板。

  如果想把模板后缀改成“.html”时就会用到app.engine方法,来重新设置模板文件的扩展名,比如想用ejs模板引擎来处理“.html”后缀的文件:app.engine('.html', require('ejs').__express);

  app.engine(ext, callback) 注册模板引擎的 callback 用来处理ext扩展名的文件。

  PS:__express不用去care,其实就是ejs模块的一个公共属性,表示要渲染的文件扩展名。

4、 文件上传multer

const multer = require('multer');

var storage = multer.diskStorage({
destination: function (req, file, cb){
cb(null, './public/images')
},
filename: function (req, file, cb){
cb(null, file.originalname)
}
});
var upload = multer({ storage: storage })
  app.post('/upload', upload.array('field1', 5), function(req, res) {
req.flash('success', '文件上传成功!');
res.redirect('/upload');
});

5、Markdown的使用

  post页面,写博客有时引用上传的图片

  Markdown图片使用:

      ![Alt text](/path/to/img.jpg "Optional title")   ===> 例如: ![](/images/1.jpge)

6、文章的编辑与修改

  conn.query时,SQL语句是拼接的,会报错:  Error: ER_BAD_FIELD_ERROR: Unknown column 'xxx' in 'where clause'

  解决办法:

  (1)每个string字段需要加""

    

  (2)SQL语句格式如下,不需要每个字段都加""

  connection.query('UPDATE users SET foo = ?, bar = ?, baz = ? WHERE id = ?', ['a', 'b', 'c', userId], function (error, results, fields) {
    if (error) throw error;
    // ...
  });
 

7、留言功能实现

 conng更新Post的comments时,会报错:Error: ER_DATA_TOO_LONG: Data too long for column 'comments' at row 1

 解决办法:

 (1)将comments字段类型varchart改为longtext      https://segmentfault.com/q/1010000009129135

8、ejs 渲染moment.js库(将时间戳日期格式化)

  (1)项目里安装moment:npm install moment --save

  (2)app.js加入如下代码:

  var moment = require('moment')

  在var app = express();后面加入 app.locals.moment = moment;

  

  (3)页面渲染调用格式为:<%= moment(new Date(parseInt("要解析的值"))).format('YYYY-MM-DD HH:MM:SS') %>

  

9、博客详情页面手动刷新,文章阅读量一直加,使用session记录

  

10、文章标题搜索--模糊查询(POSITION)

  SELECT * FROM t_blog_post WHERE POSITION("' + keyWord + '" IN title)

11、使用KindEditor

  (1)http://www.kindsoft.net/ 下载最新的 KindEditor 压缩包,解压后将文件夹重命名为 kindEditor 并放到 public 文件夹下。

  (2)修改header.ejs

    

  (3)i定义图片上传接口

    https://blog.csdn.net/dexing07/article/details/53870580

    https://blog.csdn.net/charlene0824/article/details/51234394

12、项目存在问题:
  (1)数据库操作save、update方法应该封装通用的
  (2)数据库用户数据清空,浏览器本地session存有user,还可以继续保存(已解决)

  (3)server端到数据库的CRUD等等操作,,改进使用ORM框架 sequelize
  (4)评论时,评论的用户信息应该不可编辑(已解决)

  (5)自己的评论不可操作

  (6)页面布局样式亟待设计哦

13、项目启动
  (1)网上教程本地安装mysql
  (2)setting.js配置mysql数据库连接
  (3)建表sql为t_blog_post.sql、t_blog_user.sql
  (4)npm install 安装项目依赖
  (5)npm run start 启动项目---localhost:3001,端口号可在package.json配置

14、几个页面

---------------------

--------------------------

-----------------------

--------------------------------

---------------------------------------------

Nodejs+mysql+Express: 一个简单的博客的更多相关文章

  1. Django 学习笔记之六 建立一个简单的博客应用程序

    最近在学习django时建立了一个简单的博客应用程序,现在把简单的步骤说一下.本人的用的版本是python 2.7.3和django 1.10.3,Windows10系统 1.首先通过命令建立项目和a ...

  2. Express入门教程:一个简单的博客

    来自:  http://ourjs.com/detail/56b2a6f088feaf2d031d2468 Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, ...

  3. 用express搭建一个简单的博客系统

    转自:https://blog.csdn.net/qq_29721837/article/details/62055603 Express 简介 Express 是一个简洁而灵活的 node.js W ...

  4. 使用Hexo搭建一个简单的博客(二)

    昨天想着用Hexo和github搭一个自己简单的博客,记录一下自己踩过的坑,具体的流程就不重复了,主要参考了一下几篇文章 GitHub+Hexo 搭建个人网站详细教程 使用Hexo+Github一步步 ...

  5. NodeJS+Express+MongoDB 简单个人博客系统【Study笔记】

    Blog 个人博客系统 iBlog是在学习NodeJs时候一个练手项目Demo 系统支持用户注册/登录,内容文章查看,评论,后台管理(定制显示的分类版块,进行文章内容添加)超级管理员还可进行用户管理等 ...

  6. 微信小程序初见+nodejs服务端 (一个简单的博客)

    推荐网址: 腾讯云快速开发(nodejs前后端):https://developers.weixin.qq.com/miniprogram/dev/qcloud/qcloud.html#%E5%AF% ...

  7. Python学习笔记23:Django构建一个简单的博客网站(一个)

    在说如何下载和安装Django,本节将重点讨论如何使用Django站点. 一 新建project 命令:django-admin startproject mysite # 有的须要输入:django ...

  8. django 部署一个简单的博客系统

    转:https://www.cnblogs.com/fnng/p/3737964.html 写的目的, 加深影响,熟悉开发流程, 开发都是练出来的. 环境 python3.5 windows 7 1. ...

  9. 使用Hexo搭建一个简单的博客(一)

    搭建好简洁的博客框架后,回看时发现,简洁之中透露着一丝丝简陋,好的,网上关于丰富hexo的文章也很多 记录一下自己的一些瞎操作. 在你的hexo目录下,你可以看到themes文件夹里有个默认的land ...

随机推荐

  1. 无法获取未定义或 null 引用的属性“contentWindow”

    在iframe 中有时候 这样使用contentWindow 会报   无法获取未定义或 null 引用的属性“contentWindow”   这种情况 我是在IE中遇到 其他浏览器一切正常. pa ...

  2. 【Python】【有趣的模块】tqdm | inspect

    tqdm """ [tqdm] 显示循环的进度条,再也不用担心程序跑到哪里还要跑多久了 tqdm 可以直接包裹iterable对象 from tqdm import tq ...

  3. python 删除文件夹

    只能删除空文件夹,删除非空文件夹会报错 >>> import os >>> os.rmdir("/tmp/ssh-GyoPWOFZ47") Tr ...

  4. 3.3 idea中使用git遇到的一些问题

    1. 修改TortoiseGit用户名和密码 修改TortoiseGit用户名和密码其实就是对Git的用户名和密码就行修改. 控制面板 -> 点击“用户账户” -> 管理windows凭据 ...

  5. PCA-主成分分析(Principal components analysis)

    来自:刘建平 主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一. 1. PCA的思想 PCA顾名思义,就是找出数据里最主要的方面,用数据里 ...

  6. zzulioj 1734 堆

    比赛的时候不会写,想不到DFS,一直以为需要二叉树或者建堆什么的,也没学,后来才明白这个题 代码: #include <cstdio> #include <cstring> # ...

  7. 《剑指offer》第六十四题(求1+2+…+n)

    // 面试题64:求1+2+…+n // 题目:求1+2+…+n,要求不能使用乘除法.for.while.if.else.switch.case // 等关键字及条件判断语句(A?B:C). #inc ...

  8. 学习笔记7—python 列表,数组,矩阵两两转换tolist()

    from numpy import *   a1 =[[1,2,3],[4,5,6]] #列表 print('a1 :',a1) #('a1 :', [[1, 2, 3], [4, 5, 6]])   ...

  9. traceback模块——获取详细的异常信息

    try: 1/0 except Exception,e: print e 输出结果是integer division or modulo by zero,只知道是报了这个错,但是却不知道在哪个文件哪个 ...

  10. Spring Boot设置值:分别用@ConfigurationProperties和@Value给属性设值及其区别

    @ConfigurationProperties给属性映射值编写JavaBean/** 将配置文件application.properties中配置的每一个属性值映射到当前类的属性中:* @Confi ...