Fra*_*rzi 9 node.js rxjs typescript axios nestjs
在我的NestJS应用程序中,我想返回http调用的结果.
按照NestJS HTTP模块的例子,我正在做的只是:
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(...);
}
}
Run Code Online (Sandbox Code Playgroud)
但是从客户端我得到500并且服务器控制台说:
TypeError:在ServerResponse.json上的stringify(/Users/francesco.borzi/sources/business-controller-rewrite/node_modules/express/lib/response.js:1119:12)将JSON.stringify()处的循环结构转换为JSON(在ExpressAdapter.reply /Users/francesco.borzi/sources/business-controller-rewrite/node_modules /@nestjs/core/adapters/express-adapter.js:41:52)在RouterResponseController.apply(/Users/francesco.borzi/sources/business-controller-rewrite/node_modules/@nestjs/core/router/router-response -controller.js:11:36)at process._tickCallback(internal/process/next_tick.js:182:7)
Kam*_*iec 11
此问题来自axios库。为了解决这个问题,您必须拉出该data属性:
return this.httpService.post(...)
.pipe(
map(response => response.data),
);
Run Code Online (Sandbox Code Playgroud)
问题似乎源于这样一个事实,即我们试图直接返回一个 Response 对象,这本质上是循环的。我不确定实现这一点的正确方法,但我能够通过直接使用 axios、解开承诺并仅返回数据来绕过它。
@Post('login')
async authenticateUser(@Body() LoginDto) {
const params = JSON.stringify(LoginDto);
return await axios.post('https://api.example.com/authenticate_user',
params,
{
headers: {
'Content-Type': 'application/json',
},
}).then((res) => {
return res.data;
});
}
Run Code Online (Sandbox Code Playgroud)
更新
我意识到我可以对从httpService使用新的 rxjs 管道方法返回的 Observable 做同样的事情,所以这可能是更好的方法。
@Post('login')
async authenticateUser(@Body() LoginDto) {
const params = JSON.stringify(LoginDto);
return await this.httpService.post('https://api.example.com/authenticate_user',
params,
{
headers: {
'Content-Type': 'application/json',
},
}).pipe(map((res) => {
return res.data;
}));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9504 次 |
| 最近记录: |