Javascript 如何使用NestJS重新显示HttpService调用的错误?
我正在使用NestJS,使用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以相应的状态代
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的状态代码。我从那里扔。这并不理想,但这是我的承诺,所以,这很好。谢谢