【问题标题】:NestJs using middleware on all routesNestJs 在所有路由上使用中间件
【发布时间】:2021-07-22 06:16:51
【问题描述】:

我是 nestjs 的新手,我正在使用中间件来验证我的用户。我想将其应用于所有路线。我目前正在一个一个添加控制器,它变得多余了。

export class AppModule implements NestModule {
  public configure(consumer: MiddlewareConsumer): void {
    consumer.apply(GetUserMiddleware).forRoutes(
      UserController,
      //***
    );
  }
}

我浏览了文档但找不到 (NestJs - Middleware)。

如何更改此设置以使我的中间件在所有路由上工作?

【问题讨论】:

    标签: routes nestjs middleware


    【解决方案1】:
    import { RequestMethod } from '@nestjs/common';
    // ...
          .forRoutes({
            path: '*',
            method: RequestMethod.ALL,
          });
    

    【讨论】:

      【解决方案2】:

      只需在路由中使用'*'

      export class AppModule implements NestModule {
        public configure(consumer: MiddlewareConsumer): void {
          consumer.apply(GetUserMiddleware).forRoutes('*');
        }
      }
      

      【讨论】:

        【解决方案3】:

        第一种方法:
        如果你想在每条路由上使用你的中间件,你可以使用全局中间件。

        const app = await NestFactory.create(AppModule);
        app.use(yourMiddlewareMethod);
        await app.listen(3000);
        

        注意:虽然这适用于每条路线,但用户将无法登录。在这种情况下,您可以通过在 app.module.ts 中排除中间件来覆盖用户模块上的中间件的使用,就像这样

        consumer
          .apply(yourMiddlewareMethod)
          .exclude(
            { path: 'yourPath', method: RequestMethod.GET },
            { path: 'yourPath', method: RequestMethod.POST },
            'yourPath/(.*)',
          )
          .forRoutes(yourController);
        

        第二种方法:
        app.module.ts

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

        希望这能回答你的问题。

        【讨论】:

          猜你喜欢
          • 2020-07-23
          • 2018-11-08
          • 2019-10-05
          • 2021-04-03
          • 1970-01-01
          • 2019-12-14
          • 2017-05-30
          • 1970-01-01
          • 2020-05-19
          相关资源
          最近更新 更多