如何在Nestjs中使用特定于路由的特定中间件?

时间:2018-05-29 21:22:53

标签: nestjs

我正在尝试使用此库(keycloak-connect)进行身份验证和授权。它有一个全局中间件,可以由app.use()方法直接使用,也可以在它周围包装一个nestjs中间件类。但是如何使用用于保护个别路由的路由特定的中间件?。

普通快递应用中的示例用法

app.get( '/protected', keycloak.protect('adminRole'), handler );

protect方法返回带有签名function(req, res, next)

的普通快速中间件

2 个答案:

答案 0 :(得分:2)

您的“处理程序”是一个用GET装饰的类中的方法(用POST@Controller等装饰)。 导入此控制器的模块应该声明中间件。

示例:

@Module({
  controllers: [YourController],
})
export class YourModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(keyCloack.protect('adminRole'))
      .forRoutes('/protected');
  }
}

YourController包含路由'/ protected'的处理程序。

实施NestModule是关键。然后,您必须声明configure,并且可以使用consumer

答案 1 :(得分:0)

如果仅希望将中间件应用于控制器中的路由,则可以-

export class AppModule implements NestModule {
 configure(consumer: MiddlewareConsumer) {
 consumer
  .apply(LoggerMiddleware)
  .forRoutes(CatsController);
 }
}