Angular2错误时的HTTP响应体

7
this.http.put(url, data)
    .map(response => response.json())
    .subscribe(
      response => console.log(response),
      error => console.log(error),
    );

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

当出现错误时,如何从API获取响应数据?


你尝试过查看这个网址吗:https://dev59.com/yloU5IYBdhLWcg3w1pX2 ? - Matey
也许进度事件只是两个事件中的第一个,常规错误事件在其后触发?还是HTTP调用仅触发此一进度事件,之后没有其他事件了? - Matey
4
这似乎是一个跨源问题(请查找CORS)。请求在OPTIONS命令上失败,因此服务器可能甚至没有收到请求。错误是由客户端浏览器在向服务器发送实际的PUT请求之前引发的。 - Matey
@JariPekkala,实际上我也遇到了同样的问题,想知道你们发现了什么... - Kunepro
@Kunepro,确实是与API相关。我使用的是Laradock / Docker Nginx容器,有时不喜欢OPTIONS。 - Jari Pekkala
显示剩余5条评论
2个回答

0
你可以检查响应中的 _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),
);

0

你可以尝试一下

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

    );

这有点绕弯子。不确定它是否适用于您的端点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接