【问题标题】:Angular 5 HttpClient Error response not catchableAngular 5 HttpClient 错误响应无法捕获
【发布时间】:2018-09-05 19:42:52
【问题描述】:

我们正在使用 Angular 5 和 Spring 2 OAuth 后端。 现在,当我发送旧令牌时,它当然已过期。它返回状态码:401 和带有无效令牌的错误响应等。现在我在日志中或当我发现错误时看不到它。我想得到错误,以便我可以首先记录它,然后刷新令牌或将他发送到登录页面。

现在,如果我通过以下方式订阅请求:

.subscribe(res => {
    //just random stuff.
    }, err => {
    console.log("error", err);
});

I just see this response in the log with an unknown error like in this image

可能是后端故障?因为我还在日志中看到类似“不存在'Access-Control-Allow-Origin'标头”的错误,尽管这是因为令牌无效。

Although I can see this response code in Google Chrome Dev Tools 和一个 401 状态码。

所以我尝试自己寻找解决方案。我已经有了一个拦截器并尝试了一些解决方案

return next.handle(authReq)
  .catch(error => {
    console.log("im in here");
    console.log(error);
    return Observable.throw(error);
  });

Http 服务只是抛出一个错误,即 catch 不是一个函数,甚至没有记录错误或“我在这里”。

我也尝试过在 next.handle 之后使用 .do,但遇到了与 catch 相同的错误

.do((event: HttpEvent<any>) => {
    if (event instanceof HttpResponse) {
      // do stuff with response if you want
    }
  }, (err: any) => {
  console.log(err);
    if (err instanceof HttpErrorResponse) {
      if (err.status === 401) {
      }
    }
  });

我在 http.get 之后尝试过使用管道,但它也不起作用。

http.get(...).pipe(
  retry(3), // retry a failed request up to 3 times
  catchError(this.handleError) // then handle the error
);

【问题讨论】:

    标签: javascript angular angular-http angular-http-interceptors angular-httpclient


    【解决方案1】:
        import 'rxjs/add/operator/catch';
    
        Somefunc(){
        this.httpClient
              .get("data-url")
              .subscribe(
                data => console.log('success', data),
                error => console.log('oops', error)
              );
        }
    
    
        OR
    
    this.httpClient
          .get("data-url")
          .catch((err: HttpErrorResponse) => {
            // simple logging, but you can do a lot more, see below
            console.error('An error occurred:', err.error);
          });
    

    应该可以。

    【讨论】:

    • 感谢您的帮助。但这不起作用。我已经在开头描述了我无法从中获得正确的错误日志。当我订阅时:它记录了错误的事情,当我使用 catch 时:我不能在之后订阅
    • 是不是用Http而不是HttpClient也一样?无法捕获错误?
    • 是的,这也是几乎相同的响应。状态:0 和未知错误。虽然我在开发工具中看到:401,但这次是未经授权的
    • 它与HttpClient有关。你能重新检查你的代码吗?即使在 Http 中也无法捕获错误?
    • 但现在可以了。所以我很高兴,但当然这是一个错误。但我也读过浏览器本身捕获的地方,不要放手
    猜你喜欢
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    相关资源
    最近更新 更多