中间件
匹配路由前,匹配路由完成做的一系列操作
// 默认使用的中间件配置,相当于全局使用(即每个地址跳动都会调用的操作)
// 例如有两个中间件
// app/middleware/a.js
module.exports = (options, app) => {
return async function a(ctx, next) {
console.log(options);
// 使用next继续下一个操作
await next();
}
}
// app/middleware/b.js
module.exports = (options, app) => {
return async function b(ctx, next){
console.log(options);
await next();
}
}
// app/config/config.default.js
// ..以上省略
// 这里设置了后每次路由匹配都会调用其中的中间件,按照顺序
config.middleware = ['a', 'b'];
//这个就是传入a.js的options
config.a = {
a: 'a'
}
config.b = {
b: 'b'
}
// ..以下省略
启动服务打开http://127.0.0.1:7001/
说明的确是调用了这两个中间件,而且是按照顺序的
// 关闭默认使用
// app/config/config.default.js
// 可以通过这里设置,是否默认启用
config.a = {
enable: false,
a: 'a'
}
//这样就可以跳过a中间件,进行b中间件的使用
特定路由使用的中间件
// app/middleware/a.js
module.exports = (options, app) => {
return async function a(ctx, next) {
// 这个ctx就是对应路由的上下文
console.log(ctx);
// 使用next继续下一个操作
await next();
}
}
// app/config/config.default.js
config.middleware = [];
// app/router.js
router.get('/s', app.middleware.a(),controller.s.index);
访问http://127.0.0.1:7001/s
说明访问这个路由,中间件进行了相应操作