NestJs 在所有路由上使用中间件
NestJs using middleware on all routes
我是 nestjs 的新手,我正在使用中间件来验证我的用户。我想将其应用于所有路线。我目前正在一个接一个地添加控制器,它变得多余了。
export class AppModule implements NestModule {
public configure(consumer: MiddlewareConsumer): void {
consumer.apply(GetUserMiddleware).forRoutes(
UserController,
//***
);
}
}
我浏览了文档但找不到它 (NestJs - Middleware)。
我如何更改它以使我的中间件在所有路由上工作?
import { RequestMethod } from '@nestjs/common';
// ...
.forRoutes({
path: '*',
method: 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);
}
}
希望这能回答您的问题。
只需在路线中使用 '*'
:
export class AppModule implements NestModule {
public configure(consumer: MiddlewareConsumer): void {
consumer.apply(GetUserMiddleware).forRoutes('*');
}
}
我是 nestjs 的新手,我正在使用中间件来验证我的用户。我想将其应用于所有路线。我目前正在一个接一个地添加控制器,它变得多余了。
export class AppModule implements NestModule {
public configure(consumer: MiddlewareConsumer): void {
consumer.apply(GetUserMiddleware).forRoutes(
UserController,
//***
);
}
}
我浏览了文档但找不到它 (NestJs - Middleware)。
我如何更改它以使我的中间件在所有路由上工作?
import { RequestMethod } from '@nestjs/common';
// ...
.forRoutes({
path: '*',
method: 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);
}
}
希望这能回答您的问题。
只需在路线中使用 '*'
:
export class AppModule implements NestModule {
public configure(consumer: MiddlewareConsumer): void {
consumer.apply(GetUserMiddleware).forRoutes('*');
}
}