Angular2 http响应正文出错

Posted

技术标签:

【中文标题】Angular2 http响应正文出错【英文标题】:Angular2 http response body on error 【发布时间】:2017-05-17 15:37:43 【问题描述】:
this.http.put(url, data)
    .map(response => response.json())
    .subscribe(
      response => console.log(response),
      error => console.log(error),
    );

成功时,它会输出从 API 返回的数据。出错时输出为 ProgressEvent,状态为 0。

发生错误时如何从API获取响应数据?

【问题讨论】:

你有没有试过看这个:***.com/questions/37052617/…? 是的,它也在 catch 块中返回相同的 ProgressEvent。另外值得一提的是 Angular 版本:2.2.1 进度事件是否可能只是两个事件中的第一个,而常规错误事件仅在它之后出现?还是 http 调用只触发这一进度事件,之后什么也没有? 只给出这一个响应,之后什么都没有。 API 的状态码是 422 这看起来像是一个跨域问题(查找 CORS)。请求在 OPTIONS 命令上失败,因此服务器可能甚至没有收到请求。在将实际的 PUT 请求发送到服务器之前,客户端浏览器会引发错误。 【参考方案1】:

你可以试试

this.yourHttpCall().subscribe(
        val => 
            //do something
        ,
        err => 
            let error = (() =>  try  return JSON.parse(err._body)  catch (something)  return err )()
            console.log(error);
        

    );

这是一种围绕它的黑客攻击。不确定它是否适用于您的端点。

【讨论】:

【参考方案2】:

您可以检查_body 属性作为响应,例如:

this.http.put(url, data)
.map(response => 
  if (response['_body'])  // check response here.
    return response.json()
   else 
    return  // or return null.
  
)
.subscribe(
  response => console.log(response),
  error => console.log(error),
);

【讨论】:

以上是关于Angular2 http响应正文出错的主要内容,如果未能解决你的问题,请参考以下文章

Angular2处理http响应

获取状态码 http.get 响应 angular2

如果 Angular2 HTTP 响应数据不符合类型,我如何捕获错误

Angular2 HTTP GET - 将响应转换为完整对象

获取 http 响应代码和所有可用的正文

通过基本身份验证访问 REST 的 Angular2 抛出“预检响应具有无效的 HTTP 状态代码 401”