我正在为我的应用程序使用 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
}
}
有没有办法让第一个过滤器在第一个过滤器之后捕获错误?谢谢!
最佳答案
如果多个过滤器匹配到一个错误,则优先级最高的过滤器将运行。 ExceptionFilter
的优先级有两个因素:
全局与本地
绑定(bind)到 Controller 或其方法之一的过滤器总是比全局过滤器具有更高的优先级。
Controller :
// First NotfoundFilter is checked
@UseFilters(NotfoundFilter)
全局:
// Then GlobalErrorFilter is checked
app.useGlobalFilters(new GlobalErrorFilter());
注册顺序
最后注册的过滤器将具有最高的优先级。所以最具体的过滤器应该最后注册:
@UseFilters(GlobalErrorFilter, NotfoundFilter)
// ^^^ 2nd ^^^ 1st
或
app.useGlobalFilters(new GlobalErrorFilter(), new NotfoundFilter());
// ^^^ 2nd ^^^ 1st
关于javascript - NestJS:如何将错误从一个错误过滤器传递到另一个错误过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54727103/