Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用NestJS重新显示HttpService调用的错误?_Javascript_Typescript_Observable_Axios_Nestjs - Fatal编程技术网

Javascript 如何使用NestJS重新显示HttpService调用的错误?

Javascript 如何使用NestJS重新显示HttpService调用的错误?,javascript,typescript,observable,axios,nestjs,Javascript,Typescript,Observable,Axios,Nestjs,我正在使用NestJS,使用HttpService(一个可观察的包装Axios库)将请求代理到另一个api。例如: return this.httpService.post(...) .pipe( map(response => response.data), ); 当呼叫成功时,此功能正常工作;但是,如果出现错误(4xx),如何正确返回状态和错误消息 我已经想出了如何使用承诺来实现这一点,但如果可能,我希望保持在可观察范围内。您可以使用catchError以相应的状态代

我正在使用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不会抛出4xx错误,因为它们可能是API预期的和有效的响应。您可以通过设置
validateStatus
来自定义此行为,请参见。

奇怪的是,我可以通过此管道发送代码为401的AxioError,但它始终无法捕获。所有400级错误都被视为“成功”。@JimWharton您应该能够使用
validateStatus
自定义此行为,请参见哦,这太棒了。谢谢你!看起来这被忽视了。我必须在管道内的映射中明确检查大于400的状态代码。我从那里扔。这并不理想,但这是我的承诺,所以,这很好。谢谢