Routes NestJs在所有路由上使用中间件

Routes NestJs在所有路由上使用中间件,routes,nestjs,middleware,Routes,Nestjs,Middleware,我是nestjs新手,我正在使用一个中间件来验证我的用户。我想对所有路线都适用。我目前正在一个接一个地添加控制器,它变得多余了 导出类AppModule实现NestModule{ 公共配置(使用者:MiddlewareConsumer):无效{ consumer.apply(GetUserMiddleware.forRoutes)( 用户控制器, //*** ); } } 我浏览了文档,找不到它() 如何更改此设置以使中间件在所有路由上工作?从'@nestjs/common'导入{Reques

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

导出类AppModule实现NestModule{
公共配置(使用者:MiddlewareConsumer):无效{
consumer.apply(GetUserMiddleware.forRoutes)(
用户控制器,
//***
);
}
}
我浏览了文档,找不到它()

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

从'@nestjs/common'导入{RequestMethod};
// ...
.福鲁斯({
路径:'*',
方法:RequestMethod.ALL,
});
从'@nestjs/common'导入{RequestMethod};
// ...
.福鲁斯({
路径:'*',
方法:RequestMethod.ALL,
});

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

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);
      }
    }

希望这能回答您的问题。

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

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);
      }
    }

希望这能回答您的问题。

只需在for routes中使用
“*”

导出类AppModule实现NestModule{
公共配置(使用者:MiddlewareConsumer):无效{
consumer.apply(GetUserMiddleware.forRoutes('*');
}
}

只需在路由中使用
“*”

导出类AppModule实现NestModule{
公共配置(使用者:MiddlewareConsumer):无效{
consumer.apply(GetUserMiddleware.forRoutes('*');
}
}