node.js 4.1. Express中间件

一、中间件的概念和格式

1、什么是中间件

中间件是指业务处理过程中的中间处理环节,必须有输入与输出。

2、处理流程

当一个请求到达服务器之后,可以调用多个中间件,从而对这次请求做预处理。
在这里插入图片描述

3、Express中间件的格式

Express的中间件,本质上就是一个 function 处理函数,官网上 Express 中间件的格式如下:
在这里插入图片描述
和路由处理函数的区别就是,中间件必须包含 next 形参。而路由处理函数中只包含 req 和 res.

4、next 函数的作用

next 函数是多个中间件连续调用的关键,他表示把流转关系转交给下一个中间件或路由。

二、全局生效的中间件

客户端发起的任何请求,到达服务器之后,都会触发的中间件,就叫全局生效的中间件。
通过app.use即可定义一个全局生效的中间件

多个中间件之间,共享同一份 reqres。基于这样的特性,我们可以在上游的中间件中,统一为 req 或 res 对象添加自定义的属性或方法,供下游的中间件或路由进行使用。

const express = require('express')
const app = express()

// 这是定义全局中间件的简化形式
app.use((req, res, next) => {
  // 获取到请求到达服务器的时间
  const time = Date.now()
  // 为 req 对象,挂载自定义属性,从而把时间共享给后面的所有路由
  req.startTime = time // 就不用下面路由函数里面每个都写一行这个代码了
  next()
})

app.get('/', (req, res) => {
  res.send('Home page.' + req.startTime)
})
app.get('/user', (req, res) => {
  res.send('User page.' + req.startTime)
})

app.listen(80, () => {
  console.log('http://127.0.0.1')
})

三、局部生效的中间件

1、不使用 app.use() 定义的中间件,叫做局部生效的中间件。
在这里插入图片描述
浏览器访问 http://localhost/,在 (vscode) 终端可以看到:
在这里插入图片描述
但是在 postman 访问 http://localhost/user ,就不会执行 mw1 中间件函数。这就是局部中间件。
2、定义多个局部中间件
前一个中间件函数的结果传给后一个中间件,最后把请求结果交给路由函数处理。
在这里插入图片描述

四、中间件的注意事项

  1. 一定要在路由之前注册中间件;
  2. 客户端发送过来的请求,可以连续调用多个中间件进行处理;
  3. 执行完中间件的业务代码之后,不要忘记调用 next() 函数
  4. 为了防止代码逻辑混乱,调用 next() 函数后不要再写额外的代码
  5. 连续调用多个中间件时,多个中间件之间,共享 req 和 res 对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值