HTTP 异常过滤器层与对应微服务层的唯一区别在于,不应抛出 HttpException,而应使用 RpcException。
RpcException 类是从 @nestjs/microservices 包导入的。
使用上述示例时,Nest 将处理抛出的异常并返回具有以下结构的 error 对象:
微服务异常过滤器的行为与 HTTP 异常过滤器类似,只有一个小区别。catch() 方法必须返回一个 Observable。
使用混合应用时,全局微服务异常过滤器默认未启用。
以下示例使用了手动实例化的方法作用域过滤器。与基于 HTTP 的应用类似,您也可以使用控制器作用域过滤器(即在控制器类前添加 @UseFilters() 装饰器)。
通常,您会创建完全自定义的异常过滤器来满足应用程序需求。但在某些情况下,您可能希望直接扩展核心异常过滤器 ,并根据特定因素覆盖其行为。
要将异常处理委托给基础过滤器,需要扩展 BaseExceptionFilter 并调用继承的 catch() 方法。
上述实现仅是一个展示方法的框架。您对扩展异常过滤器的实现将包含您定制的业务逻辑 (例如处理各种条件)。