如何在 Nestjs 中使用特定于路由的 express 中间件?
How to use a route specific middleware of express in Nestjs?
我正在尝试使用此库 (keycloak-connect) 进行身份验证和授权。它有一个全局中间件,可以通过 app.use()
方法直接使用,也可以通过在其周围包装一个 nestjs 中间件类来使用。但是如何使用路由特定的express中间件来保护各个路由呢?
plain express 应用中的示例用法
app.get( '/protected', keycloak.protect('adminRole'), handler );
保护方法returns 带有签名的普通 express 中间件 function(req, res, next)
你的 "handler" 是一个方法(用 GET
或 POST
等修饰)在用 @Controller
修饰的 class 中。
导入这个 controller 的模块应该声明中间件。
示例:
@Module({
controllers: [YourController],
})
export class YourModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(keyCloack.protect('adminRole'))
.forRoutes('/protected');
}
}
其中 YourController
包含路由“/protected”的处理程序。
实施NestModule
是关键。然后你有义务声明 configure
并且可以使用 consumer
.
如果您只想将中间件应用于控制器中的路由,您可以 -
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(LoggerMiddleware)
.forRoutes(CatsController);
}
}
我正在尝试使用此库 (keycloak-connect) 进行身份验证和授权。它有一个全局中间件,可以通过 app.use()
方法直接使用,也可以通过在其周围包装一个 nestjs 中间件类来使用。但是如何使用路由特定的express中间件来保护各个路由呢?
plain express 应用中的示例用法
app.get( '/protected', keycloak.protect('adminRole'), handler );
保护方法returns 带有签名的普通 express 中间件 function(req, res, next)
你的 "handler" 是一个方法(用 GET
或 POST
等修饰)在用 @Controller
修饰的 class 中。
导入这个 controller 的模块应该声明中间件。
示例:
@Module({
controllers: [YourController],
})
export class YourModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(keyCloack.protect('adminRole'))
.forRoutes('/protected');
}
}
其中 YourController
包含路由“/protected”的处理程序。
实施NestModule
是关键。然后你有义务声明 configure
并且可以使用 consumer
.
如果您只想将中间件应用于控制器中的路由,您可以 -
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(LoggerMiddleware)
.forRoutes(CatsController);
}
}