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('增加新闻')})// 仍未匹配到路由,返回404app.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对象
