我很难理解我在http调用中遇到错误的行为。
目标是根据服务器在403或400个响应中返回的错误消息来设置不同的行为。
使用Chrome网络时,我可以看到消息
但是在执行错误的console.log时,我得到的是正文中的ProgressEvent对象。
有问题的代码非常简单,200处理得很好,返回的json是可访问的。
this.service.myFunction(this.email).subscribe(
auth => console.log(auth), // works fine
error => console.log(error)
);
在实际通话中我也尝试过捕捉,但没有运气。
this.myFunction.get(url).map(res => res.json())
.catch( (err: Response) => Observable.throw(err.json()) ); // throw the error, which is also the object described above
你知道我做错了什么吗?
由于
答案 0 :(得分:2)
试试这个:
this.service.myFunction(this.email).subscribe(
auth => console.log(auth), // works fine
error => console.log(error.text())
);
Response的Angular 2文档说:
Response的接口受到Fetch Spec中定义的Response构造函数的启发,但被认为是一个静态值,其主体可以多次访问。实现中还有其他差异,但这是最重要的。
因此,如果.text()
不再发送完整回复的正文,则必须更改服务器实施以发送200 OK和错误消息。
我想问题是XMLHTTPRequest的状态更改是通过读取标题然后Angular的Http库停止读取正文......(Read this)