Malagu 中间件与 Koa 里面的中间件是一样的概念,实现了一个洋葱模型,通过中间件可以对请求的处理进行扩展增强,Malagu 框架本身很多功能就是通过中间件来实现的,比如 Cookies、Session、认证和授权等等。

Middleware

  1. export interface Middleware {
  2. handle(ctx: Context, next: () => Promise<void>): Promise<void>;
  3. readonly priority: number;
  4. }

实现自定义中间件

  1. @Component(Middleware)
  2. export class CookiesMiddleware implements Middleware {
  3. @Autowired(CookiesFactory)
  4. protected readonly cookiesFactory: CookiesFactory;
  5. async handle(ctx: Context, next: () => Promise<void>): Promise<void> {
  6. if (ctx.request) {
  7. Context.setCookies(await this.cookiesFactory.create());
  8. }
  9. await next();
  10. }
  11. readonly priority = COOKIES_MIDDLEWARE_PRIORITY;
  12. }

只需要实现 Middleware,并且加上装饰器 @Component(Middleware) 就实现并注册了自己的中间件了。

注意:调用 next 方法的时候一定要记得加 await,否则会导致全局异常处理失效的问题。