【发布时间】:2020-08-28 12:44:16
【问题描述】:
我试图避免使用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 {}
异常过滤器(与嵌套文档中的代码几乎相同):
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,
});
}
}
记录器模块:
@Global()
@Module({
providers: [LoggerService],
exports: [LoggerService],
})
export default class LoggerModule {}
你能指出哪里出了问题,为什么 LoggerService 没有注入到我的 ExceptionFilter 中?
【问题讨论】:
标签: dependency-injection nestjs