middleware
中间键
建立
使用中间件先得在app文件目录中去找有没有middleware文件夹,
如果没有就要自己新建, 后续的中间件全写在这个文件夹中
介绍
egg中间件类似洋葱模型, 每次我们编写一个中间件,就相当于在洋葱外面包了一层。
相关的请求和响应对象都在这个ctx上下文对象身上。通过这个ctx对象在各个中间件之间进行串联响应,这种模型成为洋葱模型
,因为它确实很像一个洋葱
上述两图清晰的表现了中间件的响应过程
例子
编辑中间件
注意: 一定要 await next();
// app/middleware/gzip.js
module.exports = options => {
/**
* ctx: 请求内容, 这里跟控制器中ctx一样
* next: 进入下一部
*/
return async function gzip(ctx, next) {
// await next(); // 让这个中间件最后执行
/* 中间键的逻辑代码 */
// 正常 在逻辑代码之后
await next();
};
};
使用中间键
- 一定要打括号执行
// 01- 在某个接口使用中间件
// app/router.js
module.exports = app => {
const { router, controller, middleware } = app;
// 注意: 中间件函数一定要执行
router.get('/api', middleware.gzip(), controller.home.json);
}
全局中间件
- 直接写名称字符串就ok
// 02- 全局中间件
// config/config.default.js
module.exports = (appInfo) => {
const config = (exports = {});
// 配置全局中间件
config.middleware = ['直接写中间件名称'];
}