如何解决NestJS-在拦截器不是全局拦截器内部使用服务
控制器:
@UseInterceptors(SignInterceptor)
@Get('users')
async findOne(@Query() getUserDto: GetUser) {
return await this.userService.findByUsername(getUserDto.username)
}
我还有I SignService,它是nestJwt的包装器:
SignService模块:
@Module({
imports: [
JwtModule.registerasync({
imports: [ConfigModule],useFactory: async (configService: ConfigService) => ({
privateKey: configService.get('PRIVATE_KEY'),publicKey: configService.get('PUBLIC_KEY'),signoptions: {
expiresIn: configService.get('JWT_EXP_TIME_IN_SECONDS'),algorithm: 'RS256',},}),inject: [ConfigService],],providers: [SignService],exports: [SignService],})
export class SignModule {}
最后是SignInterceptor:
@Injectable()
export class SignInterceptor implements nestInterceptor {
intercept(context: ExecutionContext,next: CallHandler): Observable<any> {
return next.handle().pipe(map(data => this.sign(data)))
}
sign(data) {
const signed = {
...data,_signed: 'signedContent',}
return signed
}
}
SignService可以正常使用,我可以使用它。我想用它作为拦截器 如何将SignService注入SignInterceptor,以便可以使用它提供的功能?
解决方法
我认为SignInterceptor
是ApiModule
的一部分:
@Module({
imports: [SignModule],// Import the SignModule into the ApiModule.
controllers: [UsersController],providers: [SignInterceptor],})
export class ApiModule {}
然后将SignService
注入到SignInterceptor
中:
@Injectable()
export class SignInterceptor implements NestInterceptor {
constructor(private signService: SignService) {}
//...
}
因为您使用@UseInterceptors(SignInterceptor)
在控制器中使用拦截器,所以Nestjs会为您实例化SignInterceptor
并处理依赖项的注入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。