【问题标题】:Angular's subscribe not logging full errorAngular 的订阅未记录完整错误
【发布时间】: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

这是怎么回事?

【问题讨论】:

    标签: javascript angular typescript angular-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) }?那只是记录未定义....
    • 对不起,我用更多信息更新了我的答案,希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2019-03-24
    • 2017-12-26
    • 1970-01-01
    • 2020-09-21
    相关资源
    最近更新 更多