【Node.js实战】一文带你开发博客项目之Express重构(博客的增删查改、morgan写日志)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【Node.js实战】一文带你开发博客项目之Express重构(博客的增删查改、morgan写日志)
+关注继续查看

一、前言

上一篇文章,我们对 myblog 项目进行了 Express 的初步重构。


接下来,我们来了解一下路由的开发,Morgan写日志,并学习一下中间件原理!


二、对博客的增删查改

1、登录中间件

我们在 blog-express 目录下创建 middleware 文件夹,专门用于写中间件

d291dee18c944997be8d24d2d5a4e235.png

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 项目的增删改查就告一段落了,接下来我们来学习一下日志功能。

efa7c814d51a4398aa83061fd42fe11a.png

fc26e9f2073a4c44adab1bc55361714a.png

6466203e339d499392efb77f398a6b01.png

7105fea82f284923be2d4dee8467da21.png

ae6659aa80c04f4c9c8f67d8ca7aea03.png

564fffef823b47e89c66a46fa91d0ef2.png

二、使用 morgan 写日志

morgan 官网

里面介绍了一些不同类型(dev,combined等)的日志的格式

f7bca11d75fb47be88583b04a2fff65f.png

25a4bf21ee844107819529b4fca08833.png

首先,我们新建专门存放日志的文件夹和 access.log 文件

34f4cfc559d1447aab2014d40b129018.png

之后,我们修改 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
  }));
}

ea71eca4c0aa406783f996833e07468a.png

36b83f50396d43fb8f283ad246afaa8f.png

7ef99570ac6c4be1a7bc43e7e0bad7a9.png

三、写在最后

至此,我们明白了 如何使用 Express 框架对我们的 myblog 项目进行进一步的重构(增删查改,使用 morgan 写日志), 继续跟进学习吧!


后续会对该项目进行多次重构【多种框架(express,koa)和数据库(mysql,sequelize,mongodb)】


如果你需要该项目的 源码,请通过本篇文章最下面的方式 加入 进来~~

45fc82a82c6542bdb2ff4986377d8db3.png

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1天前
|
资源调度 前端开发 Shell
使用 Docker Node 镜像运行项目
使用 Docker Node 镜像运行项目
|
18天前
|
JSON JavaScript 数据格式
在uni-app项目里使用node服务实现模拟接口
在uni-app项目里使用node服务实现模拟接口
9 1
|
28天前
|
开发工具 git
如何运行github上面的node+express项目
如何运行github上面的node+express项目
38 0
|
28天前
|
数据采集 JavaScript 前端开发
Node.js新手在哪儿找小项目练手?
Node.js新手在哪儿找小项目练手?
16 0
|
2月前
|
缓存 JavaScript Linux
关于 Node.js 项目中的 .npmrc 文件
关于 Node.js 项目中的 .npmrc 文件
27 0
|
2月前
|
JSON JavaScript 前端开发
Node.js 项目中 package-lock.json 文件的作用
Node.js 项目中 package-lock.json 文件的作用
23 0
|
3月前
|
域名解析 监控 JavaScript
宝塔面板pm2管理器部署node.js(express框架)sever文件,可以使用域名访问你的后端项目
宝塔面板pm2管理器部署node.js(express框架)sever文件,可以使用域名访问你的后端项目
184 0
|
3月前
|
JavaScript 前端开发
解决vue.js + node.js搭接的项目每次修改内容后都要重启问题
解决vue.js + node.js搭接的项目每次修改内容后都要重启问题
53 0
|
4月前
|
JavaScript 测试技术 开发工具
Vue学习之node.js环境下利用Vue-cli脚手架搭建Vue项目
之前练习了Vue一些基础的命令标签,在学习中在遇到一些基础知识我会继续向里面进行补充。
|
4月前
|
JavaScript Linux Shell
centos下设置node.js开机启动(并且启动自己的项目js)
centos下设置node.js开机启动(并且启动自己的项目js)
推荐文章
更多