この簡単なデモにはエラーがあります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
JSONにシリアル化できないため、AxiosResponse
オブジェクト全体を返すことはできません。次のような応答データを取得する可能性があります。
@Get()
async root() {
const response = await this.http.get('https://api.github.com/users/januwA').toPromise();
return response.data;
}
応答を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*/)
}
}
例を書くと、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));
}
}