Я пытаюсь отловить сбои в конкретном контроллере с фильтрами.Мой фильтр требует доступа к другой службе (для сохранения в БД), и я не уверен, как получить фильтр уровня класса с внедрением зависимости (DI, чтобы фильтр имел доступ к службе).
Я имеюв настоящее время передаю сервис от контроллера, где я использую декоратор UseFilters
, но понял, что декораторы не используют одну и ту же область видимости.
@UseFilters(new UnprocessableEntityExceptionFilter(myService))
@Catch(UnprocessableEntityException)
export class UnprocessableEntityExceptionFilter implements ExceptionFilter {
constructor(private readonly requestsService: RequestsService) { }
async catch(exception: UnprocessableEntityException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const request = ctx.getRequest();
const status = exception.getStatus();
const body = exception.message;
response.status(status).json(body);
await this.requestsService.create(request, response, body);
}
}
И я хочу использовать этот фильтр на уровне классавот так ...
@UseFilters(new UnprocessableEntityExceptionFilter())
export class EventsController {
constructor() { }
@Get()
async get() {
...
}
Но я явно не могу создать новый экземпляр UnprocessableEntityExceptionFilter
, потому что он требует внедрения зависимостей.
Я понимаю, что документация подсказывает нам использовать этот метод, когда фильтрыесть внедрение зависимостей, но я не хочу, чтобы этот фильтр был глобальным.
@Module({
providers: [
{
provide: APP_FILTER,
useClass: HttpExceptionFilter,
},
],
})