web-dev-qa-db-ja.com

Axiosを使用したNestjs

この簡単なデモにはエラーがありますhttps://docs.nestjs.com/techniques/http-module

import { Get, Controller, HttpService } from '@nestjs/common';
import { AxiosResponse } from 'axios'
import { Observable } from 'rxjs'
@Controller()
export class AppController {
  constructor(private readonly http: HttpService) {}
  @Get()
  root(): Observable<AxiosResponse<any>>  {
    return this.http.get('https://api.github.com/users/januwA');
  }
}

私は何をすべきか?

[Nest] 7356   - 2018-10-18 00:08:59   [ExceptionsHandler] Converting circular structure to JSON +9852ms
TypeError: Converting circular structure to JSON
    at JSON.stringify (<anonymous>)

nest i
common version : 5.1.0
core version   : 5.1.0
6
januw a

JSONにシリアル化できないため、AxiosResponseオブジェクト全体を返すことはできません。次のような応答データを取得する可能性があります。

@Get()
async root() {
  const response = await this.http.get('https://api.github.com/users/januwA').toPromise();
  return response.data;
}
2
Kim Kern

応答をJSONとして確実に処理し、それをpromiseとして返してデータを取得できるようにする必要があります。両方またはHttpServiceまたはaxiosのいずれかを使用します

import { Get, Controller, HttpService } from '@nestjs/common';
@Controller()
export class AppController {
  constructor(private readonly http: HttpService) {}
  @Get()
      root(): {
        return this.httpClient.get('https://api.github.com/users/quen2404')
        .toPromise()
        .then(res => res.data)
        .catch(err => /*handle error*/)
      }
}
0
Juan Velasquez

例を書くと、getメソッドはAxiosResponse<>を返し、循環参照が含まれます。したがって、Webサービスhttps://api.github.com/users/januwAをプロキシ化する場合は、 AxiosResponse.data を返す必要があります。

import { Get, Controller, HttpService } from '@nestjs/common';
import { AxiosResponse } from 'axios'
import { Observable } from 'rxjs'
@Controller()
export class AppController {
  constructor(private readonly http: HttpService) {}
  @Get()
  root(): Observable<any>{
    return this.httpClient.get('https://api.github.com/users/quen2404')
      .pipe(map(response => response.data));
  }
}
0
quen2404