Cette démo simple a une erreur 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');
}
}
Que devrais-je faire?
[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
Vous ne pouvez pas simplement renvoyer tout l'objet AxiosResponse
car il ne peut pas être sérialisé en JSON. Vous souhaiterez probablement obtenir les données de réponse comme ceci:
@Get()
async root() {
const response = await this.http.get('https://api.github.com/users/januwA').toPromise();
return response.data;
}
Vous devez vous assurer de gérer vos réponses comme un JSON, vous pouvez le renvoyer comme une promesse et obtenir les données, utiliser l'un des deux ou HttpService ou 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*/)
}
}
lorsque vous écrivez dans votre exemple, get
méthode return AxiosResponse<>
et contient une référence circulaire. Donc, si vous souhaitez proxifier le service Web https://api.github.com/users/januwA
, vous devez retourner 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));
}
}