首页 > 解决方案 > Nest.js - 根据标头值跳过中间件

问题描述

我有一个使用nestjs和的应用程序MiddlewareConsumer。我想知道是否有办法根据标头值跳过中间件?

我检查了文档,发现我只能使用路径或方法(就像我现在所做的那样),但也许我缺少一些东西?

我的代码示例:

export class AuthorizationModule implements NestModule {
configure(consumer: MiddlewareConsumer): void {
    consumer.apply(DiscriminatorValidator).with(common.USERS).forRoutes(
        {path: RELATIVE_RESOURCE_PATH, method: RequestMethod.POST},{path: RELATIVE_RESOURCE_PATH, method: RequestMethod.PUT});
    consumer.apply(validate).forRoutes(AuthorizationController);
    consumer.apply(HeadersValidator).with().forRoutes(AuthorizationController);
    consumer.apply(ContextAndHeadersMiddleware).forRoutes(AuthorizationController);

 }
}

标签: javascriptnode.jstypescriptexpressnestjs

解决方案


这是不可能的MiddlewareConsumer


但是,中间件本身可以检查它是否适用或应该被跳过:

@Injectable()
export class ContextAndHeadersMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: Function) {
    if (req.get('my-header') === 'SKIP') {
      // skip this middleware if header value is set
      return next();
    }
    // middleware logic
  }
}

推荐阅读