NestJS:如何将错误从一个错误过滤器传递到另一个错误过滤器?

问题描述 投票:1回答:2

我正在使用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在第一个之后捕获错误?谢谢!

javascript node.js typescript nestjs
2个回答
2
投票

如果多个过滤器与错误匹配,则将运行具有最高优先级的过滤器。 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           

0
投票

我在这里看到了两种不同的例外情况。所以应该可以(我认为)在第一个过滤器捕获异常后你可以让它做一些事情,然后抛出另一个类型的新异常,然后应该在那里捕获。希望能帮助到你

© www.soinside.com 2019 - 2024. All rights reserved.