有效捕获Angular 2 HTTP错误

时间:2016-09-26 19:57:18

标签: angular angular2-http angular2-observables

我似乎无法从HTTP Observable和响应对象中获取可靠的错误信息。在某些情况下,它会报告正确的数据,但有时我会得到有效空的响应对象。

例如: enter image description here

正在进行实际调用的服务使用:

创建observable
return this.http.post(this.config.urls.url("login"), {
    username: username,
    password: password
  }, new RequestOptions({withCredentials:true}));

在上面的代码中,服务器返回带有JSON错误响应的401,但subscribe()响应既没有获取响应数据,也没有获取状态代码或消息。触发错误处理程序,但响应无法确定错误信息。

我已经尝试拦截.subscribe()上的错误处理程序(如上面的组件),。catch()方法和.map()(在服务中),但在所有情况下,响应都没有可用的数据在里面。如果没有有效的响应,则无法向用户返回错误消息

然而,我看到了这项工作,但我不能为我的生活看到有什么不同。

我想做什么:

  • 服务方法使HTTP呼叫服务
  • 服务方法具有.catch(响应)处理程序并修复错误对象
  • 客户端发布订阅并具有接受错误对象的错误处理程序

这与Promises(.toPromise)一起工作正常,但是对于原始的Observables,我似乎无法在许多情况下获得正确的错误信息。

有关如何使此工作可靠的任何建议以及为什么响应未返回状态信息?

更新

事实证明问题是由服务器端进行自动身份验证重定向引起的。如果发生401,服务器已经向登录页面返回302个请求,看起来Observables正在吃302 - 没有关注,也没有捕获状态代码/原始请求数据。

我打算将这个问题归结为操作员错误(我),但请将此保留在此处以防其他人遇到此类问题。故事的道德 - 小心使用Observables的302重定向响应。

0 个答案:

没有答案
相关问题