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 响应数据不符合类型,我如何捕获错误