我正在尝试使用发出 POST 请求@nestjs/axios
,然后访问响应。
到目前为止,这是我的代码:
verifyResponse(captcha_response: String): Observable<AxiosResponse<any>> {
return this.httpService.post('some url', {
captcha_response
});
}
Run Code Online (Sandbox Code Playgroud)
但是,我不确定如何访问响应数据。如果我用来console.log()
查看回复,我会得到以下信息:
Observable { _subscribe: [Function (anonymous)] }
Run Code Online (Sandbox Code Playgroud)
我对 Nest.js 和 Observable 的概念都很陌生。如果有一个发出 HTTP 请求并访问响应数据的示例,我将不胜感激。
Jay*_*iel 45
如果您想让使用HttpService
承诺而不是在RxJS Observable上使用,您可以使用lastValueFrom
环绕调用this.httpService.post()
。这会将 Observable 转换为 Promise,您可以await
像往常一样使用它。否则,如果您只是返回可观察值,Nest 将为您处理等待响应。无论哪种方式,您都需要确保使用map((resp) => resp.data)
您拥有的函数,这样您就不会在响应对象中得到循环数据(因为 Axios 的响应对象在设计上就是循环的)。
如果您正在尝试获取console.log()
数据,您将需要tap
以map
以下形式使用
this.httpService.post(url, data, options).pipe(
tap((resp) => console.log(resp)),
map((resp) => resp.data),
tap((data) => console.log(data)),
);
Run Code Online (Sandbox Code Playgroud)
tap
本质上是一种间谍方法,用于挖掘可观察对象、查看数据并让它通过。它可以改变数据,但通常最好将其留给map
或其他rxjs 运算符。
对于简单的await
能力来说,这样的东西就足够了
const data = await lastValueFrom(
this.httpService.post(url, data, options).pipe(
map(resp => res.data)
)
);
Run Code Online (Sandbox Code Playgroud)
对象类型示例AxiosRequestConfig
(TypeScript)
const requestConfig: AxiosRequestConfig = {
headers: {
'Content-Type': 'YOUR_CONTENT_TYPE_HEADER',
},
params: {
param1: 'YOUR_VALUE_HERE'
},
};
const responseData = await lastValueFrom(
this.httpService.post(requestUrl, null, requestConfig).pipe(
map((response) => {
return response.data;
}),
),
);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
67186 次 |
最近记录: |