概述
中间件函数可以在请求响应周期中使用req(request object)、res(response object)和next函数。next函数是一个在express router中的函数,当它调用的时候就会执行当前中间件的下一个中间件。
中间件函数可以执行以下任务
- 任意的代码
- 改变request和response对象
- 结束请求响应周期
- 调用任务中的下一个中间件
如果当前的中间件函数没有结束请求响应周期,它必须调用next()将控制权交给下一个中间件函数,否则这个请求将会被挂起。
使用
中间件的加载顺序很重要,加载在前,运行在前
如果提前结束了请求响应周期,那么后面的中间件将不会被执行
note:next(‘route’)只能在app.METHOD()和router.METHOD()中使用
application-level 中间件
绑定一个应用级的中间件使用app.use()和app.METHOD()方法
router-level 中间件
绑定一个路由级的中间件和应用级中间件很相似,只是需要绑定到express.Router()的实例。
var router = express.Router()
router.use()
可以在路由级的中间件中调用next(‘router’)跳过剩下的路由处理
var app = express()
var router = express.Router()
// predicate the router with a check and bail out when needed
router.use(function (req, res, next) {
if (!req.headers['x-auth']) return next('router')
next()
})
router.get('/', function (req, res) {
res.send('hello, user!')
})
// use the router and 401 anything falling through
app.use('/admin', router, function (req, res) {
res.sendStatus(401)
})
错误处理中间件
错误处理中间件总是有4个参数,必须有4个,声明了不用也要有4个。
内置的中间件
express.static 静态资源服务
express.json
express.urlencode