一、前言
上一篇文章,我们对 myblog 项目进行了 Express 的初步重构。
接下来,我们来了解一下路由的开发,Morgan写日志,并学习一下中间件原理!
二、对博客的增删查改
1、登录中间件
我们在 blog-express 目录下创建 middleware 文件夹,专门用于写中间件
loginCheck.js
引入失败的模型,如果已经登录则 next(),若没有登录则失败未登录
const { ErrorModel } = require('../model/resModel') module.exports = (req, res, next) => { // 已经登录 if (req.session.username) { next() return } res.json( new ErrorModel('未登录') ) }
2、开发路由
我们借助刚刚写好的登录中间件,去完善我们的博客路由
blog.js
我们使用 express 提供给我们的方式去完善路由,从而实现相应的功能
var express = require('express'); var router = express.Router(); // 导入博客和用户控制器相关内容 const { getList, getDetail, newBlog, updateBlog, delBlog } = require('../controller/blog') // 导入成功和失败的模型 const { SuccessModel, ErrorModel } = require('../model/resModel') const loginCheck = require('../middleware/loginCheck') // 博客列表 router.get('/list', (req, res, next) => { // 博客的作者,req.query 用在 GET 请求中 let author = req.query.author || '' // 博客的关键字 const keyword = req.query.keyword || '' if (req.query.isadmin) { // 管理员界面 if (req.session.username == null) { // 未登录 res.json( new ErrorModel('未登录') ) return } // 强制查询自己的博客 author = req.session.username } // 查询的结果 const result = getList(author, keyword) return result.then(listData => { res.json( new SuccessModel(listData) ) }) }); // 博客详情 router.get('/detail', (req, res, next) => { const result = getDetail(req.query.id) return result.then(data => { res.json( new SuccessModel(data) ) }) }); // 新增博客 loginCheck 作为中间件 router.post('/new', loginCheck, (req, res, next) => { req.body.author = req.session.username const result = newBlog(req.body) return result.then(data => { res.json( new SuccessModel(data) ) }) }) // 更新博客 router.post('/update', loginCheck, (req, res, next) => { const result = updateBlog(req.query.id, req.body) return result.then(val => { if (val) { res.json( new SuccessModel() ) } else { res.json( new ErrorModel('更新博客失败') ) } }) }) // 删除博客 router.post('/del', loginCheck, (req, res, next) => { const author = req.session.username const result = delBlog(req.query.id, author) return result.then(val => { if (val) { res.json( new SuccessModel() ) } else { res.json( new ErrorModel('删除博客失败') ) } }) }) module.exports = router;
3、测试
下面我们成功测试完毕。至此,使用 express 重构的 myblog 项目的增删改查就告一段落了,接下来我们来学习一下日志功能。
二、使用 morgan 写日志
里面介绍了一些不同类型(dev,combined等)的日志的格式
首先,我们新建专门存放日志的文件夹和 access.log 文件
之后,我们修改 package.json 文件,添加一行启动项(prd)
package.json
"scripts": { "start": "node ./bin/www", "dev": "cross-env NODE_ENV=dev nodemon ./bin/www", "prd": "cross-env NODE_ENV=production nodemon ./bin/www" },
我们在 app.js 文件中导入必要的模块,之后按照 开发环境 / 线上环境 进行区分
app.js
var path = require('path'); var fs = require('fs'); ...... const ENV = process.env.NODE_ENV if (ENV !== 'production') { // 开发环境 / 测试环境 app.use(logger('dev')) } else { // 线上环境使用 combined(写入文件) const logFileName = path.join(__dirname, 'logs', 'access.log') const writeStream = fs.createWriteStream(logFileName, { flags: 'a' }) app.use(logger('combined', { stream: writeStream })); }
三、写在最后
至此,我们明白了 如何使用 Express 框架对我们的 myblog 项目进行进一步的重构(增删查改,使用 morgan 写日志), 继续跟进学习吧!
后续会对该项目进行多次重构【多种框架(express,koa)和数据库(mysql,sequelize,mongodb)】
如果你需要该项目的 源码,请通过本篇文章最下面的方式 加入 进来~~