dif*_*iff 8 dependency-injection nestjs
我试图避免使用app.useGlobalFilters(new AllExceptionsFilter(...));,但我正在努力让 DI 将我的自定义 LoggerService 注入 AllExceptionsFilter 中。
我的应用程序模块导入了 LoggerModule 并定义了过滤器,如下所示:
import { APP_FILTER } from '@nestjs/core';
...
@Module({
imports: [LoggerModule],
providers: [
{
provide: APP_FILTER,
useClass: AllExceptionsFilter,
},
],
})
export default class AppModule {}
Run Code Online (Sandbox Code Playgroud)
异常过滤器(与嵌套文档中的代码几乎相同):
import { ExceptionFilter, Catch, ArgumentsHost, HttpException, HttpStatus } from '@nestjs/common';
import LoggerService from '../modules/logger/logger.service';
@Catch()
export default class AllExceptionsFilter implements ExceptionFilter {
constructor(private readonly loggerService: LoggerService) {}
catch(exception: Error, host: ArgumentsHost): void {
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const request = ctx.getRequest();
console.log(this.loggerService);
// this.loggerService.error(exception);
const status =
exception instanceof HttpException ? exception.getStatus() : HttpStatus.INTERNAL_SERVER_ERROR;
response.status(status).json({
statusCode: status,
message: exception.message,
path: request.url,
});
}
}
Run Code Online (Sandbox Code Playgroud)
记录器模块:
@Global()
@Module({
providers: [LoggerService],
exports: [LoggerService],
})
export default class LoggerModule {}
Run Code Online (Sandbox Code Playgroud)
你能指出哪里出了问题,以及为什么 LoggerService 没有注入到我的 ExceptionFilter 中吗?
我发现为什么这不起作用。
我的 LoggerService 注释为:@Injectable({ scope: Scope.REQUEST })
我假设因为实例与请求相关联,所以它已经在异常阶段被丢弃。切换到@Injectable({ scope: Scope.TRANSIENT })解决问题。
| 归档时间: |
|
| 查看次数: |
4561 次 |
| 最近记录: |