gpt4 book ai didi

nestjs - Nest JS 拦截器的依赖注入(inject)未定义

转载 作者:行者123 更新时间:2023-12-05 01:13:20 30 4
gpt4 key购买 nike

我创建了一个如下所示的拦截器,我希望在全局范围内使用它。我将拦截器添加到我的模块并进行设置,以便嵌套 js 应根据 NestJS Docs 为我处理 DI ,但是当我向我的服务发出请求时,我收到一个错误,指出 Cannot read property log of undefined 所以看起来 DI 没有被 NestJS 处理。

拦截器代码:

import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { LoggingService } from './logging.service';

@Injectable()
export class AuthInterceptor implements NestInterceptor {
constructor(private readonly loggingService: LoggingService) { }
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
return next
.handle()
.pipe(
map((response) => {
this.loggingService.log('Responded successfully');
return response;
})
);
}
}

拦截器模块:

import { Module } from '@nestjs/common';
import { APP_INTERCEPTOR } from '@nestjs/core';
import { AuthInterceptor } from './auth.interceptor';
import { LoggingService } from './logging.service';

@Module({
providers: [
LoggingService,
{
provide: APP_INTERCEPTOR,
useClass: AuthInterceptor,
},
],
})
export class AuthInterceptorModule {}

我的应用程序根目录中的 app.module.ts 导入 AuthInterceptorModule。我假设我搞砸了,但我不清楚如何解决这个 DI 问题。

最佳答案

在发现我的 LoggingService 依赖于另一个请求范围内的依赖项后,我能够自行解决这个问题。由于我的拦截器中存在请求范围的依赖项,这意味着我的拦截器也必须是请求范围的。

代码的更改很简单,只需要将 AuthInterceptorModule 更改为:

import { Module } from '@nestjs/common';
import { APP_INTERCEPTOR } from '@nestjs/core';
import { AuthInterceptor } from './auth.interceptor';
import { LoggingService } from './logging.service';

@Module({
providers: [
LoggingService,
{
provide: APP_INTERCEPTOR,
useClass: AuthInterceptor,
},
],
})
export class AuthInterceptorModule {}

import { Module } from '@nestjs/common';
import { APP_INTERCEPTOR, Scope } from '@nestjs/core';
import { AuthInterceptor } from './auth.interceptor';
import { LoggingService } from './logging.service';

@Module({
providers: [
LoggingService,
{
provide: APP_INTERCEPTOR,
scope: Scope.REQUEST,
useClass: AuthInterceptor,
},
],
})
export class AuthInterceptorModule {}

关于nestjs - Nest JS 拦截器的依赖注入(inject)未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60554537/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com