NestJS中如何使用多个全局拦截器
How to use multiple global interceptors in NestJS
我已经知道我们可以从下面的代码创建全局拦截器:
import { Module } from '@nestjs/common';
import { APP_INTERCEPTOR } from '@nestjs/core';
@Module({
providers: [
{
provide: APP_INTERCEPTOR,
useClass: LoggingInterceptor,
},
],
})
export class AppModule {}
但是,如果我想说 UserInterceptor
。
UserInterceptor
将从数据库中获取用户并转换请求。
UserInterceptor
需要注入假设 UserService
.
我想在全球范围内使用 UserInterceptor
。
@Injectable()
export class UserInterceptor {
constructor(private readonly service: UserService) {}
}
从 documentation 开始,我们无法执行 app.useGlobalInterceptors(new UserInterceptor())
,因为 UserInterceptor
在构造函数 (UserService) 中需要 1 个参数。
并且因为我们已经将 APP_INTERCEPTOR
用于 LoggingInterceptor
,所以我没有找到另一种方法来为 APP_INTERCEPTOR
分配另一个值以全局使用拦截器。
例如,我认为如果我们可以这样做,问题就会解决:
providers: [
{
provide: APP_INTERCEPTOR,
useClass: [LoggingInterceptor, UserInterceptor]
}
]
providers: [
{
provide: APP_INTERCEPTOR,
useClass: LoggingInterceptor
},
{
provide: APP_INTERCEPTOR,
useClass: UserInterceptor
}
]
就这样
我已经知道我们可以从下面的代码创建全局拦截器:
import { Module } from '@nestjs/common';
import { APP_INTERCEPTOR } from '@nestjs/core';
@Module({
providers: [
{
provide: APP_INTERCEPTOR,
useClass: LoggingInterceptor,
},
],
})
export class AppModule {}
但是,如果我想说 UserInterceptor
。
UserInterceptor
将从数据库中获取用户并转换请求。
UserInterceptor
需要注入假设 UserService
.
我想在全球范围内使用 UserInterceptor
。
@Injectable()
export class UserInterceptor {
constructor(private readonly service: UserService) {}
}
从 documentation 开始,我们无法执行 app.useGlobalInterceptors(new UserInterceptor())
,因为 UserInterceptor
在构造函数 (UserService) 中需要 1 个参数。
并且因为我们已经将 APP_INTERCEPTOR
用于 LoggingInterceptor
,所以我没有找到另一种方法来为 APP_INTERCEPTOR
分配另一个值以全局使用拦截器。
例如,我认为如果我们可以这样做,问题就会解决:
providers: [
{
provide: APP_INTERCEPTOR,
useClass: [LoggingInterceptor, UserInterceptor]
}
]
providers: [
{
provide: APP_INTERCEPTOR,
useClass: LoggingInterceptor
},
{
provide: APP_INTERCEPTOR,
useClass: UserInterceptor
}
]
就这样