我最近开始使用nestjs,我想为所有路由应用中间件,除了auth路由。
在文档中,它说我可以在我想要中间件的地方添加所有控制器或路由路径,但我发现这种方式相当昂贵
.forRoutes(
SearchController,
Other,
Other,
Other
);
所以我想知道是否有解决方案,或者您是否设法使用正则表达式来完成这样的事情:
.forRoutes(
{path: 'All route except /auth', method: RequestMethod.ALL}
);
现在我们使用这个功能
exclude
。
export class YourModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(YourMiddleware)
.exclude('auth')
.forRoutes('*');
}
}
文档: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
。
排除引用确切路由路径的路由。如果您在
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('*');
}
}
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(YourMiddleware)
.exclude('auth/(.*)')
.forRoutes('*');
}
}
如果您打算使用 fastify,请记住它依赖于最新版本的 https://www.npmjs.com/package/path-to-regexp,因此您需要使用
(.*)
*
:
NestJs 更新文档的链接:https://docs.nestjs.com/middleware#route-wildcards
... .forRoutes('(.*)')