src 目录下新增 middleware 目录
新建 xxx.ts
基础模版如下:
import { IMiddleware } from '@midwayjs/core';
import { Middleware } from '@midwayjs/decorator';
import { NextFunction, Context } from '@midwayjs/web';
@Middleware()
export class ErrorCatchMiddleware
implements IMiddleware<Context, NextFunction>
{
resolve() {
return async (ctx: Context, next: NextFunction) => {
// 执行下一个 Web 中间件,最后执行到控制器
// 这里可以拿到下一个中间件或者控制器的返回值
const result = await next();
// 返回给上一个中间件的结果
return result;
};
}
static getName(): string {
return 'ErrorCatch';
}
}
静态 getName 方法,用来指定中间件的名字,方便排查问题。
全局组册
@Configuration({
// ...
})
export class AutoConfiguration {
@App()
app: koa.Application;
async onReady() {
this.app.useMiddleware(ReportMiddleware);
// or
this.app.useMiddleware([ReportMiddleware1, ReportMiddleware2]);
}
}