在我的NestJS应用程序中,我想返回一个http调用的结果。
以NestJS HTTP module为例,我所做的很简单:
import { Controller, HttpService, Post } from '@nestjs/common';
import { AxiosResponse } from '@nestjs/common/http/interfaces/axios.interfaces';
import { Observable } from 'rxjs/internal/Observable';
@Controller('authenticate')
export class AuthController {
constructor(private readonly httpService: HttpService) {}
@Post()
authenticate(): Observable<AxiosResponse<any>> {
return this.httpService.post(...);
}
}
然而,从客户端我得到了500,服务器控制台说:
类型错误:将循环结构转换为JSON。stringify()at stringify(/Users/francesco. borzi/sources/business-controller-rewrite/node_modules/express/lib/response。js:一一一九:12)在ServerResponse.json(/Users/francesco. borzi/sources/business-controller-rewrite/node_modules/express/lib/response。js:二百六十:14)在ExpressAdapter。reply(/Users/francesco. borzi/sources/business-controller-rewrite/node_modules/@nestjs/core/adapters/express-adapter。js:四十一:52)在RouterResponseController。apply(/Users/francesco. borzi/sources/business-controller-rewrite/node_modules/@nestjs/core/router/router-response-controller。js:十一:36)在过程中。_tickCallback(internal/process/next_tick. js:一百八十二:(七)
4条答案
按热度按时间50few1ms1#
此问题来自axios库。为了解决这个问题,你必须取出
data
属性:z5btuh9x2#
这个问题似乎源于这样一个事实,即我们试图直接返回一个Response对象,而这本质上是循环的。我不确定实现这一点的正确方法,但我能够通过直接使用axios来解决这个问题,打开promise并返回数据。
更新
我意识到我可以使用新的rxjs管道方法对从
httpService
返回的Observable做同样的事情,所以这可能是更好的方法。waxmsbnn3#
如果您正在寻找HTTP数据,HTTP状态码,并希望使用firstValueFrom('rxjs ')将observable转换为promise
8e2ybdfx4#
对于我们这些熟悉Axios并希望坚持使用Axios的人,我可以建议以下解决方案: