【问题标题】: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);
}
}
希望这能回答你的问题。