NestJS: Как передать ошибку из одного фильтра ошибок в другой? - PullRequest
0 голосов
/ 16 февраля 2019

Я использую NestJS для своего приложения и отлавливаю все ошибки в фильтре.У меня есть логика, в которой я хочу, чтобы каждая конкретная ошибка была отформатирована и затем отправлена ​​в финал ExceptionFilter.У меня есть следующий код:

@Catch()
    export class GlobalErrorFilter implements ExceptionFilter {
 public catch(error: HttpException, host: ArgumentsHost) {
// do something
}
    }

А также этот:

@Catch(NotFoundException)
export class NotfoundFilter implements ExceptionFilter<NotFoundException> {
    public catch(error: NotFoundException, host: ArgumentsHost) {
        // do something here
    }
}

Есть ли способ, что первый фильтр ловит ошибку после первого?Спасибо!

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Если несколько фильтров будут соответствовать ошибке, будет запущен фильтр с наивысшим приоритетом.Есть два фактора для приоритета ExceptionFilter:

Глобальный по сравнению с Локальным

Фильтры, которые привязаны к контроллеру или одному из его методов, всегда имеют более высокийприоритет перед глобальными фильтрами.

Контроллер:

// First NotfoundFilter is checked
@UseFilters(NotfoundFilter)

Global:

// Then GlobalErrorFilter is checked
app.useGlobalFilters(new GlobalErrorFilter());

Порядок регистрации

Фильтр, который был зарегистрирован последним, будет иметьвысший приоритетПоэтому самый специфический фильтр должен быть зарегистрирован последним:

@UseFilters(GlobalErrorFilter, NotfoundFilter)
//          ^^^ 2nd            ^^^ 1st

или

app.useGlobalFilters(new GlobalErrorFilter(), new NotfoundFilter());
//                       ^^^ 2nd                  ^^^ 1st           
0 голосов
/ 16 февраля 2019

Я вижу здесь 2 разных исключения с определенным типом.Таким образом, должно быть возможно (я думаю), что после того, как первый фильтр перехватит исключение, вы можете сделать что-то, а затем выдать новое исключение другого типа, которое затем должно быть перехвачено.Надеюсь, это поможет

...