【发布时间】:2023-03-07 14:43:01
【问题描述】:
我正在尝试弄清楚如何使用 Axios 和 Nestjs 框架发出 http 请求。在 Nest 文档中,它提供了流程的高级概述,但没有详细说明如何处理使用 axios 发出请求时返回的 Observable。
我正在使用相互 SSL 身份验证向 API 发出请求。我遇到了证书问题,我的请求失败了,但是没有抛出异常,控制器返回 200 ok,没有数据。当我注释掉所有 rxjs 代码并执行 axios.get(...).toPromise() 时,我发现了这一点。当我这样做时,我突然有一个完整的堆栈跟踪并引发了异常。
知道我在这里做错了什么吗?我应该把 catchError 块放在 map 块之前吗?
我的代码:
getRegistrationStatus(msisdn: string): Observable<AxiosResponse> {
return this.httpService.get(`${this.API_BASE_URL}/vb/registrationStatus?MSISDN=${msisdn}`)
.pipe(
map(res => res.data),
catchError(e => {
throw new HttpException(e.statusText, e.status);
})
);
}
我的 HTTP 模块/axios 配置:
HttpModule.register({
timeout: 20000,
validateStatus: () => true,
httpsAgent: new Agent({
ca: readFileSync(process.env.va_ca),
keepAlive: false,
cert: readFileSync(process.env.va_cert),
key: readFileSync(process.env.va_key),
passphrase: process.env.va_passphrase
})
})
【问题讨论】: