3. 中间件

中间件就是匹配路由之前或者匹配路由完成做的一系列操作。在中间件中,如果想往下匹配,需要next()

express中有以下几种中间件

  • 应用级中间件
  • 路由级中间件
  • 错误处理中间件
  • 内置中间件(如之前托管静态资源的express.static)
  • 第三方中间件

1. 应用级中间件

  1. app.use((req, res, next) => { // 匹配任何路由
  2. next() // 完成后继续向下执行
  3. })

一般用于权限判断

2. 路由级中间件(不常用)

  1. app.get('/news/add', (req, res, next) => {
  2. console.log('增加新闻')
  3. // next()
  4. })
  5. app.get('/news/:id', (req, res) => {
  6. console.log('增加新闻')
  7. })

以上两个路由,一般访问/news/add时,只会执行路由/news/add 的回调就不会继续执行/news/:id 的了,但是如果在前者中写了next(),则会继续

3. 错误处理中间件

一般用于所有路由匹配完成之后

  1. app.get('/news/add', (req, res, next) => {
  2. console.log('增加新闻')
  3. })
  4. app.get('/news/:id', (req, res) => {
  5. console.log('增加新闻')
  6. })
  7. // 仍未匹配到路由,返回404
  8. app.use((req, res, next) => {
  9. res.status(404).send('404')
  10. })

也可用于配置vue等框架的history模式

4. 第三方中间件

例如express等都是第三方中间件

  1. // 使用body-parse获取post请求的参数
  2. const bodyParser = require('body-parser')
  3. // 解析applicatioin/x-www-form-urlencoded类型的
  4. app.use(bodyParser.urlencoded({extended:false}))
  5. // 解析application/json类型的
  6. app.use(bodyParser.json())
  7. app.post('/login', (req, res) => {
  8. const postParams = req.body
  9. })
  10. // 原理:
  11. //相当于在app.use((req, res, next) => { } )中,给req添加了body对象