将中间件应用到NestJs的路由方法中

问题描述 投票:0回答:2

我的 NestJs 模块设置为:

@Module({
  controllers: [MyController],
})
export class MyModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(MyMiddleware)
      .forRoutes('/myRoute');
  }
}

如何将 MyMiddleware 应用于仅 GET /myRoute 而不是 POST /myRoute?

module routes nestjs middleware
2个回答
1
投票

正如文档所示这样的事情应该做:

@Module({
  controllers: [MyController],
})
export class MyModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(MyMiddleware)
      .forRoutes({ path: '/myRoute', method: RequestMethod.GET });
  }
}

0
投票

我认为 @UseMiddleware() 是一个缺失的功能,因为目前我不知道如何实现我的逻辑。

我想创建一个可重用的 WithActionQueryParam('authenticate') 中间件/装饰器,并通过以下方式将其集成到 AuthController 中:

  @WithActionQueryParam('authenticate')
  @UseGuards(JwtAuthGuard)
  @Get()
  async authenticate(@Req() req: Request) {
    return req.user;
  }

  @WithActionQueryParam('refreshToken')
  @UseGuards(JwtAuthGuard)
  @Get()
  async refreshToken() {
    return this.authService.handleRefreshToken(req)
  }

我希望能够通过查询参数处理请求,这对于 Express 来说非常容易,但不幸的是对于 Nest JS 来说就不那么容易了。

我知道我可以在第一个控制器中放置一些 if 条件,但我更喜欢上面描述的方式。

© www.soinside.com 2019 - 2024. All rights reserved.