中间件的作用 :
共享一份 req,res
上游的中间件定义的属性和方法,下游的中间件和路由能使用
多次调用
app.use()
可以定义多个中间件
中间件的分类 :
-
应用级别的中间件 绑定到
app
实例身上 -
路由级别的中间件 绑定到
router
实例身上 -
错误级别的中间件 形参(err,req,res,next)
-
Express内置的中间件
-
第三方的中间件
应用级中间件
全局中间件
-
定义一个函数
-
注册这个函数为中间件
const express = require('express')
const app = express()
const mw = (req, res, next) => {
console.log('这是个最简单的中间件');
// 把流传关系交给后面的路由
next()
}
// 全局注册中间件
app.use(mw)
//路由
app.get('/', (req, res) => {
res.send('Server')
})
app.post('/user', (req, res) => {
res.send('user Server')
})
app.listen(3000, () => {
console.log('服务器启动于: http://127.0.0.1:3000');
中间件的简写
// 全局生效的中间件,省略中间件
app.use((req, res, next) => {
console.log('这是个最简单的中间件');
// 把流传关系交给后面的路由
next()
})
局部生效中间件
// 第三变量接收中间件函数
const mw1 = (req, res, next) => {
console.log('这是个最简单的中间件');
// 把流传关系交给后面的路由
req.a = '星星少爷'
next()
}
// 局部生效中间件
app.get('/', mw1 ,(req, res) => {
res.send('Server' + req.a)
})
多个局部生效中间件
// 局部生效中间件
app.get('/', mw1,mw2,mw3 ,(req, res) => {
res.send('Server' + req.a)
})
// 局部生效中间件
app.get('/',[ mw1,mw2,mw3 ],(req, res) => {
res.send('Server' + req.a)
})
错误级别中间件
专门用来捕获整个项目中发生的异常错误,从而防止项目异常崩溃的问题。
错误级别中间件必须注册在所有的路由之后
//下载express npm i express -S
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
// 人为制造错误
throw new Error('星星少爷死了')
res.send('Hello World!')
})
app.use((err, req, res, next) => {
console.log('错误:' + err.message);
// res.send(err.message)
})
app.listen(port, () => console.log(`Server running at http://127.0.0.1:${port}`))
内置中间件
-
express.static
快速托管静态资源的内置中间件,例如:HTML
文件、图片、CSS
样式等(无兼容性) -
express.json
解析JSON
格式的请求体数据(有兼容性,仅在4.16.0+版本中可用) -
express.urlencoded
解析URL-encoded
格式的请求体数据(有兼容性,仅在4.16.0+版本中可用)
//下载express npm i express -S
const express = require('express')
const app = express()
const port = 3000
app.use(express.json())
app.use(express.urlencoded())
app.post('/user', (req, res) => {
console.log(req.body);
res.send('Hello World!')
})
app.listen(port, () => console.log(`Server running at http://127.0.0.1:${port}`))
express.json
请求结果:{ name: '星星', age: 18 }
express.urlencoded
请求结果:{ name: '星星少爷', age: '80' }
第三方中间件
-
非
Express
官方内置,而是由第三方开发出来的中间件,叫做第三方中间件。在项目中,大家可以按需下载并配置第三方中间件,从而提高项目的开发效率 -
例如:在
express@4.16.0
之前的版本中,经常使用body-parser
这个第三方中间件,来解析请求体数据。使用步骤如下-
运行
npm install body-parser
安装中间件 -
使用
require
导入中间件 -
调用
app.use()
注册并使用中间件
-
-
注意:
Express
内置的express.urlencoded
中间件,就是基于body-parser
这个第三方中间件进一步封装出来
自定义中间件
-
实现步骤:
-
定义中间件
-
监听
req
的data
事件 -
监听
req
的end
事件 -
使用
querystring
模块解析请求体数据 -
将解析出来的数据对象挂载为
req.body
-
将自定义中间件封装为模块
-