web-dev-qa-db-fra.com

Nestjs utilisant axios

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
6
januw a

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;
}
2
Kim Kern

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*/)
      }
}
0
Juan Velasquez

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));
  }
}
0
quen2404