NestJS:如何将错误从一个错误过滤器传递到另一个错误过滤器?
我正在使用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
}
}
有没有办法让第一个Filter在第一个之后捕获错误?谢谢!
回答如下:如果多个过滤器与错误匹配,则将运行具有最高优先级的过滤器。 ExceptionFilter
的优先级有两个因素:
全球与本地
绑定到控制器或其某个方法的过滤器始终具有比全局过滤器更高的优先级。
控制器:
// 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