Angular 的订阅未记录完整错误

Posted

技术标签:

【中文标题】Angular 的订阅未记录完整错误【英文标题】:Angular's subscribe not logging full error 【发布时间】:2020-09-30 09:54:17 【问题描述】:

我正在尝试从订阅记录错误,但错误似乎...不完整?

我从未见过这种问题,也无法在 Google 上找到任何内容。代码如下:

this._http.post(this.urlPath, email).subscribe(
    res => 
      // stuff
    ,
    err => 
      console.log(err) // <- I need to log this
    
  );

它在一定程度上起作用。当我打开浏览器的控制台时,为了检查错误,我得到的是:

问题是,这里似乎缺少信息。如果我打开“网络”选项卡,相同请求的响应如下所示:

如您所见,真实响应包含更多信息。我试过使用observe: "response",但无济于事。我应该注意,如果我尝试使用fetch,响应就会完成,但我宁愿使用 HttpClient

这是怎么回事?

【问题讨论】:

【参考方案1】:

当您收到 http 错误状态代码时,您无法通过与成功案例相同的方式访问服务返回的负载。就像一个特殊的物体。

但是你可以通过在你的服务中使用管道和错误处理程序来访问它。这是它的一个最小示例:

your.service.ts
...

handleError(error) 
  return throwError(error.error);

return  this.http.get ... the rest of your request.pipe(
 catchError(this.handleError)
);
...

在您使用服务的地方,在错误中您可以访问错误请求包含的完整响应。

 ...
 , error => 
   console.warn(error);        
 

或者更好的是,您可以抛出整个对象以访问错误(响应正文)和其余参数,例如状态代码。

【讨论】:

这是什么意思?使用HttpClient是绝对不可能的吗?为什么会这样? err => console.log(err._body) ?那只是记录未定义.... 对不起,我用更多信息更新了我的答案,希望对您有所帮助。

以上是关于Angular 的订阅未记录完整错误的主要内容,如果未能解决你的问题,请参考以下文章

生产构建后如何解决Angular给定的错误(未定义订阅)?

Angular 2:可观察订阅未正确读取数据[重复]

订阅未在 Angular 2 中定义?

Angular - Jasmine/karma - 订阅 lambda 表达式未执行

Angular Jasmine 测试未在 ngOnInit 中触发订阅

Angular 如何处理未可知异常错误