[英]How to rethrow errors of HttpService call with NestJS?
我使用 NestJS 本质上是使用HttpService
(一个可观察包装的 Axios 库)将请求代理到另一个 api。 例如:
return this.httpService.post(...)
.pipe(
map(response => response.data),
);
这在调用成功时正常工作; 但是,如果出现错误 (4xx),我该如何正确返回状态和错误消息?
我已经想出如何用承诺来做到这一点,但如果可能的话,我想留在一个可观察的范围内。
您可以使用catchError
重新抛出具有相应状态代码的异常:
import { catchError } from 'rxjs/operators';
this.httpService.get(url)
.pipe(
catchError(e => {
throw new HttpException(e.response.data, e.response.status);
}),
);
请注意, error.response
可能为空,请参阅axios 文档以了解要检查的所有错误情况。
此外,axios 不会抛出 4xx 错误,因为它们可能是预期的,并且来自 API 的有效响应。 您可以通过设置validateStatus
定义此行为,请参阅文档。
您好,您也可以像这样尝试从请求中获取 rxjs 的价值
const { data } = await lastValueFrom(
this.httpService.get(`${process.env.URL}/users`, {
headers: {
Authorization: authorization,
},
}),
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.