我似乎无法从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,我似乎无法在许多情况下获得正确的错误信息 .

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

Update:

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

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