在使用 NestJS 创建 API 时,我想知道哪种方法是处理错误/异常的最佳方式。我发现了两种不同的方法:
- Have individual services and validation pipes
throw new Error()
, have the controllercatch
them and then throw the appropriate kind ofHttpException
(BadRequestException
,ForbiddenException
等等..) - 让控制器简单地调用负责处理那部分业务逻辑的服务/验证管道方法,并抛出适当的
HttpException
。
两种方法各有利弊:
- 这似乎是正确的方法,但是,服务可以返回
Error
出于不同的原因,我如何从控制器知道哪种类型的HttpException
要返回? - 非常灵活,但是服务中有
Http
相关内容似乎是错误的。
我想知道,哪一种(如果有的话)是“nest js”的实现方式?
你是怎么处理这件事的?
原文由 Aaron Ullal 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设您的业务逻辑抛出
EntityNotFoundError
并且您希望将其映射到NotFoundException
。为此,您可以创建一个
Interceptor
来转换您的错误:然后,您可以通过将
@UseInterceptors(NotFoundInterceptor)
添加到控制器的类或方法中来使用它;甚至作为所有路线的全球拦截器。当然,你也可以在一个拦截器中映射多个错误。在此 codeandbox 中尝试一下。