ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Nestjs에서 외부 api 호출할 때 HttpModule 사용
    Nest.js 2023. 11. 15. 16:25
    728x90

    외부 api를 호출 할 일이 생겨서, Nestjs에서 제공하는 HttpModule @nestjs/axios axios를 먼저 설치 했다.

     

    $ npm i --save @nestjs/axios axios

     

    import { HttpService } from '@nestjs/axios';
    
    @Get()
    async findAll() {
        return this.httpService.get('https://jsonplaceholder.typicode.com/posts');
    }

     

     

    [Nest] 276  - 11/15/2023, 7:18:23 AM   ERROR [ExceptionsHandler] Converting circular structure to JSON
        --> starting at object with constructor 'ClientRequest'
            property 'socket' -> object with constructor 'TLSSocket'
        --- property '_httpMessage' closes the circle
    TypeError: Converting circular structure to JSON
        --> starting at object with constructor 'ClientRequest'
       property 'socket' -> object with constructor 'TLSSocket'
     property '_httpMessage' closes the circle
       at JSON.stringify (<anonymous>)
         at stringify (/app/node_modules/express/lib/response.js:1150:12)
        at ServerResponse.json (/app/node_modules/express/lib/response.js:271:14)
       at ExpressAdapter.reply (/app/node_modules/@nestjs/platform-express/adapters/express-adapter.js:61:62)
       at RouterResponseController.apply (/app/node_modules/@nestjs/core/router/router-response-controller.js:15:36)
        at /app/node_modules/@nestjs/core/router/router-execution-context.js:175:48
        at processTicksAndRejections (node:internal/process/task_queues:95:5)
       at /app/node_modules/@nestjs/core/router/router-execution-context.js:47:13
      at /app/node_modules/@nestjs/core/router/router-proxy.js:9:17

     

    공식문서를 천천히 다시 읽어보니까 

    메서드의 반환 값은 HttpServiceObservable이므로 rxjs- firstValueFrom 또는를 사용하여 lastValueFrom Promise 형식으로 요청 데이터를 검색할 수 있습니다.

     

    맨 마지막에 이렇게 적혀 있는데 httpService.get을 바로 return 했을때 리턴값이

     

    Promise<Observable<AxiosResponse<any,any>>>

     

    Observable인걸 알 수 있다. rxjs에서 제공하는 firstValueFrom를 이용하면 잘 가져오는걸 알 수 있다.!!!

    또한 에러 핸들링은 rxjs에서 제공하는 catchError를 통해서 하면 된다!

     

    Reference

    https://docs.nestjs.com/techniques/http-module

    728x90
Designed by Tistory.