在异常过滤器中读取异常情况下的响应

时间:2020-07-10 07:14:07

标签: nestjs

这是整体情况。

  1. 我们在模块级别应用了异常过滤器。
  2. 我们必须调用一些第三方REST以获取一些数据。
  3. 与第3方的其余呼叫失败,并显示400并有一些响应数据。
  4. 我们必须将其退回给呼叫者。

因此,以非常简单的方式,共有3个部分:

  1. A正在呼叫B
  2. B呼叫C,而C的响应正文失败,如https://run.mocky.io/v3/a3b8da60-f2a4-4658-a601-e044a151fc7b

所以,如果我们看一下响应,它就像:

find({item: "item 1"})

我需要阅读此响应正文并将其发送回A。

这是详细的解释。

app.module.ts

------------ (X) --------------
HTTP RESPONSE STATUS: 400
RESPONSE BODY:
{
  status: 400,
  code: 'BAD_REQUEST',
  message: 'Message'
}

product.module.ts

@Module({
 .....
 providers: [
    ConvertErrorStatusToCode,
    {
      provide: 'APP_FILTER',
      useClass: HttpExceptionFilter,
    }
 ],
})
export class AppModule implements NestModule{}

product.service.ts

@Module({
  controllers: [<Controllers>],
  providers: [ProductService],
  imports: [HttpModule]
})
export class ProductModule {}

http-exception.filter.ts

 @Injectable({ scope: Scope.REQUEST })
 export class ProductService {
      constructor(<HTTPSERVICE INJECTED>) {}
      async somethirdpartycall(): Promise<Partial<MyDto>> {
         // here using httpservice i call the URL pasted and 
      }
 }

我正在尝试获取RESPONSE BODY,但无法这样做。所以:

  1. 如何在异常过滤器中读取该响应正文
  2. 这是这样做的好方法,还是我们应该遵循其他方式

1 个答案:

答案 0 :(得分:0)

我建议研究官方文档中的拦截器

https://docs.nestjs.com/interceptors#exception-mapping

尤其是Exception mapping,这似乎是您发布(转换错误消息)的一个好案例