Nestjs 使用 axios
Posted
技术标签:
【中文标题】Nestjs 使用 axios【英文标题】:Nestjs using 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
【问题讨论】:
【参考方案1】:正如您在示例中所写,get
方法返回 AxiosResponse<>
并包含循环引用。
所以如果你想代理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;
【讨论】:
toPromise 将被弃用,请参阅文档rxjs.dev/deprecations/to-promise 处理来自http服务的错误在map之后使用catchError
函数。【参考方案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*/)
【讨论】:
以上是关于Nestjs 使用 axios的主要内容,如果未能解决你的问题,请参考以下文章
使用 NestJS 和 TypeOrm,在我运行 NestJS 应用程序后不会自动创建表
从使用 nestjs API 应用程序调试 npm 库(使用 noidejs、nestjs 和 typescript 构建)