Чтение ответа в случае исключения в фильтре исключений - PullRequest
0 голосов
/ 10 июля 2020

Вот общий сценарий.

  1. У нас есть фильтр исключений, примененный на уровне модуля.
  2. Мы должны вызвать сторонний REST для получения некоторых данных.
  3. Остальной вызов третьей стороне не работает с 400 и имеет некоторые данные ответа.
  4. Мы должны вернуть это нашему вызывающему.

Итак, очень простым способом это 3 раздела:

  1. A вызывает B
  2. 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)
      }
}

Я пытаюсь задержать ОТВЕТСТВЕННОГО ТЕЛА, но не может этого сделать. Итак:

  1. Как читать это тело ответа в фильтре исключений
  2. Это хороший подход, или мы должны пойти другим путем

1 Ответ

0 голосов
/ 14 июля 2020

Я предлагаю изучить перехватчики в официальной документации. сообщение об ошибке)

...