Nestjs:除 /auth 之外所有路由的中间件

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

我最近开始使用nestjs,我想为所有路由应用中间件,除了auth路由。

在文档中,它说我可以在我想要中间件的地方添加所有控制器或路由路径,但我发现这种方式相当昂贵

.forRoutes(
     SearchController,
     Other,
     Other,
     Other
);

所以我想知道是否有解决方案,或者您是否设法使用正则表达式来完成这样的事情:

.forRoutes(
    {path: 'All route except /auth', method: RequestMethod.ALL}
);
regex typescript routes middleware nestjs
5个回答
7
投票

现在我们使用这个功能

exclude

export class YourModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(YourMiddleware)
      .exclude('auth')
      .forRoutes('*');
  }
}

进一步了解:https://docs.nestjs.com/middleware#exclusion-routes


5
投票

文档:https://docs.nestjs.com/middleware 标题:排除路线

export class AppModule implements NestModule {
      configure(consumer: MiddlewareConsumer) {
        consumer.apply(LoggerMiddleware).forRoutes('*')
        consumer.apply(tokenVerify).exclude('/auth').forRoutes('*')
    } }

如果您有

/auth/(.*)
/auth/login
等路线,请使用
/auth/register


2
投票

排除引用确切路由路径的路由。如果您在

main.ts
处定义了全局前缀,则还需要进入该排除路径。

例如:

main.ts

app.setGlobalPrefix('api/v1');

模块.ts

export class YourModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(YourMiddleware)
      .exclude({ path:'api/v1/auth',method: RequestMethod.ALL})
      .forRoutes('*');
  }
}

0
投票
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(YourMiddleware)
      .exclude('auth/(.*)')
      .forRoutes('*');
  }
}

-1
投票

如果您打算使用 fastify,请记住它依赖于最新版本的 https://www.npmjs.com/package/path-to-regexp,因此您需要使用

(.*)
*

NestJs 更新文档的链接:https://docs.nestjs.com/middleware#route-wildcards

... .forRoutes('(.*)')
© www.soinside.com 2019 - 2024. All rights reserved.