3. 中间件
中间件就是匹配路由之前或者匹配路由完成做的一系列操作。在中间件中,如果想往下匹配,需要next()
express中有以下几种中间件
- 应用级中间件
- 路由级中间件
- 错误处理中间件
- 内置中间件(如之前托管静态资源的express.static)
- 第三方中间件
1. 应用级中间件
app.use((req, res, next) => { // 匹配任何路由
next() // 完成后继续向下执行
})
一般用于权限判断
2. 路由级中间件(不常用)
app.get('/news/add', (req, res, next) => {
console.log('增加新闻')
// next()
})
app.get('/news/:id', (req, res) => {
console.log('增加新闻')
})
以上两个路由,一般访问/news/add
时,只会执行路由/news/add
的回调就不会继续执行/news/:id
的了,但是如果在前者中写了next(),则会继续
3. 错误处理中间件
一般用于所有路由匹配完成之后
app.get('/news/add', (req, res, next) => {
console.log('增加新闻')
})
app.get('/news/:id', (req, res) => {
console.log('增加新闻')
})
// 仍未匹配到路由,返回404
app.use((req, res, next) => {
res.status(404).send('404')
})
也可用于配置vue等框架的history模式
4. 第三方中间件
例如express等都是第三方中间件
// 使用body-parse获取post请求的参数
const bodyParser = require('body-parser')
// 解析applicatioin/x-www-form-urlencoded类型的
app.use(bodyParser.urlencoded({extended:false}))
// 解析application/json类型的
app.use(bodyParser.json())
app.post('/login', (req, res) => {
const postParams = req.body
})
// 原理:
//相当于在app.use((req, res, next) => { } )中,给req添加了body对象