繁体   English   中英

如何使用 NestJS 重新抛出 HttpService 调用的错误?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM