Вот общий сценарий.
- У нас есть фильтр исключений, примененный на уровне модуля.
- Мы должны вызвать сторонний REST для получения некоторых данных.
- Остальной вызов третьей стороне не работает с 400 и имеет некоторые данные ответа.
- Мы должны вернуть это нашему вызывающему.
Итак, очень простым способом это 3 раздела:
- A вызывает B
- B вызывает C и C не имеет тела ответа, например https://run.mocky.io/v3/a3b8da60-f2a4-4658-a601-e044a151fc7b
Итак, если мы посмотрим на ответ, он будет примерно таким:
------------ (X) --------------
HTTP RESPONSE STATUS: 400
RESPONSE BODY:
{
status: 400,
code: 'BAD_REQUEST',
message: 'Message'
}
Мне нужно ПРОЧИТАТЬ этот текст ответа и отправить его обратно в A.
Здесь является подробным объяснением.
app.module.ts
@Module({
.....
providers: [
ConvertErrorStatusToCode,
{
provide: 'APP_FILTER',
useClass: HttpExceptionFilter,
}
],
})
export class AppModule implements NestModule{}
product.module.ts
@Module({
controllers: [<Controllers>],
providers: [ProductService],
imports: [HttpModule]
})
export class ProductModule {}
product.service.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
}
}
http-exception.filter.ts
@Catch()
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: any, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const request: Request = ctx.getRequest<Request>();
const response: Response = ctx.getResponse<Response>();
// how to read the response of the request that failed
// at (X)
}
}
Я пытаюсь задержать ОТВЕТСТВЕННОГО ТЕЛА, но не может этого сделать. Итак:
- Как читать это тело ответа в фильтре исключений
- Это хороший подход, или мы должны пойти другим путем