中间件函数

image.png
如图这就时中间件函数,也就是基本使用那篇笔记中路由处理函数,但它实际上中间件函数,
它的工作流程是这样的
中间件示意图.jpg
完全与基本使用那篇笔记中多个路由处理函数对应
image.png
image.png
据我现在对express的了解我只用到啦路由级中间件,也就是对请求和响应数据对象进行更改。

路由级中间件

image.png

正常处理

  1. app.get('/api', (req, res, next) => {
  2. console.log('中间件1')
  3. next()
  4. }, (req, res, next) => {
  5. console.log('中间件2')
  6. next()
  7. res.send('2');
  8. }, (req, res, next) => {
  9. console.log('中3')
  10. next()
  11. })

当有访问请求过来, 你会发现,我中间件函数2中向客户端发送响应数据,但是后面的中间件函数3还是会执行
image.png

后续没有中间件函数

当我取消中间件函数2中的发送响应数据, 直接404啦这是因为响应并没哟结束
image.png

如果发生错误

  1. app.get('/api', (req, res, next) => {
  2. console.log('中间件1')
  3. next()
  4. }, (req, res, next) => {
  5. console.log('中间件2')
  6. next( new Error('err')) // 爆出错误
  7. }, (req, res, next) => {
  8. console.log('中3')
  9. next()
  10. })

image.png
服务直接报错啦
image.png
请求到的状态码是500

有错误处理函数

  1. app.get('/api', (req, res, next) => {
  2. console.log('中间件1')
  3. next()
  4. }, (req, res, next) => {
  5. console.log('中间件2')
  6. next( new Error('err'))
  7. }, (req, res, next) => {
  8. console.log('中3')
  9. next()
  10. })
  11. //处理错误的中间件
  12. app.use(require('./errorMiddleware'))
  1. // 处理错误的中间件
  2. module.exports = (err, req, res, next) => {
  3. if (err) {
  4. const errObj = {
  5. code: 500,
  6. msg: err instanceof Error ? err.message : err,
  7. };
  8. //发生了错误
  9. res.status(500).send(errObj);
  10. } else {
  11. next();
  12. }
  13. };

image.png
终端并没有报错,而是让服务继续运行
image.png
但是请求到的状态码是500

总结

无论处于何种状态,三个中间件函数都执行完啦,除非你没调用next函数