Angular HttpInterceptor忽略特定的HttpErrorResponse状态

时间:2018-04-12 21:26:39

标签: angular

我有一个功能正常的HttpInterceptor。到目前为止,它的责任有限,因为我只捕获HttpErrorResponse。我希望只是忽略状态代码404,以便调用服务可以决定如何处理错误。我尝试过几种不同的方法。

如果我将if块留空,以便拦截器什么都不做,那么服务中的捕获会导致"你提供了未定义的'预期流的地方。您可以提供Observable,Promise,Array或Iterable。"错误信息。

如果我让拦截器返回Observable.of(errorResponse),请参见下文,http.get调用的catch永远不会被命中。

如果我根本没有注册拦截器,那么该服务按预期工作,但这并没有帮助,因为我将要进化这个拦截器所做的事情。

拦截

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

return next.handle(request)        
  .catch((errorResponse: HttpErrorResponse) => {

    if (errorResponse.status === 404) {
        return Observable.of(errorResponse);
    } else if (errorResponse.status === 401) {
        this.windowRef.location.href = this.windowRef.location.href;
    } else {
        console.error(errorResponse);

        let errorMessage: string = '';

        for (const error of errorResponse.error) {
            errorMessage += error.message + '<br/>';
        }

        return Observable.throw(errorMessage || 'Server Error');
    }
  });

}

服务

return this.http
.get<any>(integrationsApiUrl, { withCredentials: true })
.catch((errorResponse: any) => {      
  if (errorResponse.status === 404) {
    return Observable.throw('No setup data could be found.');
  }
});

0 个答案:

没有答案