3.2 Express中间件的初体验
1.定义中间件函数
const express = require('express');
const app = express();
const mw = function (req, res, next) {
console.log('这是最简单的中间件函数');
//把流转关系转交给下一个中间件或路由
next()
}
app.listen('80', () => {
console.log('http://127.0.0.1');
})
2.全局生效的中间件
客户端发起的任何请求,到达服务器之后,都会触发的中间件,叫做全局生效的中间件。

const express = require('express');
const app = express();
const mw = function (req, res, next) {
console.log('这是最简单的中间件函数');
//把流转关系转交给下一个中间件或路由
next()
}
//当发起请求之后,会先把请求交给中间件,所以会调用mw,接着使用next交给下一个
//如果没有就会默认给下面的路由
//将mw注册为全局生效的中间件
app.use(mw)
app.get('/', (req, res) => {
res.send('HOme page')
})
app.get('/user', (req, res) => {
res.send('Userpage')
})
app.listen('80', () => {
console.log('http://127.0.0.1');
})

3.定义全局中间件的简化形式
const express = require('express');
const app = express();
// const mw = function (req, res, next) {
// console.log('这是最简单的中间件函数');
// //把流转关系转交给下一个中间件或路由
// next()
// }
// //当发起请求之后,会先把请求交给中间件,所以会调用mw,接着使用next交给下一个
// //如果没有就会默认给下面的路由
// //将mw注册为全局生效的中间件
// app.use(mw)
app.use((req, res, next) => {
console.log('这是最简单的中间件函数');
next()
})
app.get('/', (req, res) => {
res.send('HOme page')
})
app.get('/user', (req, res) => {
res.send('Userpage')
})
app.listen('80', () => {
console.log('http://127.0.0.1');
})

4.中间件的作用
多个中间件可以共享同一份req和res,基于这样的操作,我们可以在上游的中间中,

const express = require('express');
const app = express();
app.use((req, res, next) => {
const time = Date.now()
//为req对象,挂载自定义属性,从而把时间共享给后面的所有路由
console.log('这是最简单的中间件函数');
req.startTime = time
console.log(time);
next()
})
app.get('/', (req, res) => {
res.send('HOme page' + req.startTime)
})
app.get('/user', (req, res) => {
res.send('Userpage' + req.startTime)
})
app.listen('80', () => {
console.log('http://127.0.0.1');
})
5.定义多个全局中间件
可以使用app.use()连续定义多个中间件,客户端请求到达服务器之后,会按照中间件定义的先后顺序依次进行调用,示例代码如下:
const express = require('express');
const app = express();
//定义第一个全局中间件
app.use((req, res, next) => {
console.log('调用了第一个全局中间件');
next()
})
//定义第二个全局中间件
app.use((req, res, next) => {
console.log('调用了第二个全局中间件');
next()
})
app.get('/', (req, res) => {
res.send('HOme page')
})
app.get('/user', (req, res) => {
res.send('Userpage')
})
app.listen('80', () => {
console.log('http://127.0.0.1');
})
6.局部生效的中间件
不使用app.use()定义的中间件,叫做局部生效的中间件,示例代码如下:
const express = require('express')
const app = express()
const mw = (req, res, next) => {
console.log('调用了局部生效的中间件');
next()
}
app.get('/', mw, (req, res) => { //在这里先调用的是mw这个局部中间件,其次再调用路由
res.send('你很棒嘛');
})
app.listen('80', () => {
console.log('http://127.0.0.1');
})
7.定义多个局部中间件

8.了解中间件的5个使用注意
- 1.必须在路由之前注册中间件
- 2.客户端发过来的请求,可以连续调用多个中间件进行处理
- 3.执行完中间件的业务代码之后,不要忘记调用next()函数
- 4.为了防止代码混乱,再调用next()后,就不要写代码了
- 5.连续调用多个中间件时,多个中间件之间共享req和res对象
9.中间件的分类
1.应用级别的中间件

2.路由级别的中间件

希望有用

浙公网安备 33010602011771号