配置
中间件是一个放置在 app/middleware 目录下的单独文件,它需要 exports 一个普通的 function,接受两个参数:
-
options: 中间件的配置项,框架会将 app.config[${middlewareName}] 传递进来。
-
app: 当前应用 Application 的实例。
使用中间件
在 config.default.js中加入下面的配置就完成了中间件的开启和配置
middleware: [ '文件名' ],
在框架和插件中使用中间件
框架和插件不支持在 config.default.js 中匹配 middleware,需要通过以下方式:
// app.js
module.exports = app => {
// 在中间件最前面统计请求时间
app.config.coreMiddleware.unshift('report');
};
// app/middleware/report.js
module.exports = () => {
return async function (ctx, next) {
const startTime = Date.now();
await next();
// 上报请求时间
reportTime(Date.now() - startTime);
}
};
router 中使用中间件
以上两种方式配置的中间件是全局的,会处理每一次请求。 如果你只想针对单个路由生效,可以直接在 app/router.js 中实例化和挂载,如下:
module.exports = app => {
const gzip = app.middleware.gzip({ threshold: 1024 });
app.router.get('/needgzip', gzip, app.controller.handler);
};