【问题标题】:Nestjs using axiosNestjs 使用 axios
【发布时间】:2019-03-22 09:45:34
【问题描述】:

这个简单的演示有一个错误 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

【问题讨论】:

    标签: javascript node.js axios nestjs


    【解决方案1】:

    正如您在示例中所写,get 方法返回 AxiosResponse&lt;&gt; 并包含循环引用。 所以如果你想代理webservicehttps://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));
      }
    }
    

    【讨论】:

      【解决方案2】:

      您不能只返回整个 AxiosResponse 对象,因为它无法序列化为 JSON。您很可能希望得到这样的回复data

      @Get()
      root() {
        return this.http.get('https://api.github.com/users/januwA').pipe(
          map(response => response.data)
        );
      }
      

      或者使用Promises:

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

      【讨论】:

      【解决方案3】:

      您必须确保将响应作为 JSON 处理,您可以将其作为承诺返回并获取数据,使用两者之一或 HttpService 或 axios

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

      【讨论】:

        猜你喜欢
        • 2021-09-15
        • 2022-01-23
        • 2020-06-23
        • 2022-09-23
        • 1970-01-01
        • 2020-05-23
        • 2020-12-19
        • 2021-12-16
        • 2022-01-02
        相关资源
        最近更新 更多