nestjs - Nest JS 拦截器的依赖注入未定义
问题描述
我创建了一个拦截器,如下所示,我希望在全局范围内使用它。我将拦截器添加到我的模块并进行设置,以便 Nest 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
from:
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 {}
推荐阅读
- python - Python 写入 GRIB 文件
- amazon-web-services - 我无法通过 SSH 连接到使用 Terraform 创建的 EC2 实例
- c# - Url.Action 返回错误值.net core 3.1
- php - MYSQL TimeDiff 如果使用 PHP 为 0,则不减去
- php - 使用 add_rewrite_rule 进行简单的页面重定向
- r - 运行 Amelia 包时出现问题 - 不存在变量
- excel-formula - Excel:复杂查找 + '如果单元格包含'
- c# - 使用 LINQtoCSV 格式化十进制列
- javascript - 比较两个数组并找出差异
- twitter-bootstrap - 按钮不会在 Bootstrap 4 的断点处垂直堆叠