我的服务中有以下代码
myService.ts
makeHttpGetRequest(url){
return Observable.interval(config.SUPERVISOR_REFRESH_INTERVAL * 1000)
.switchMap(() => this.http.get(url))
.map(res => res.json())
.timeout(config.REQUEST_TIMEOUT * 1000, new Error('Time out occurred'))
}
在我的组件文件中,
myComponent.ts
ngOnInit(){
this._myService.makeHttpGetRequest(myurl)
.subscribe(
data => {
this.supervisorServers = data;
}
},
error => {
this.error = true;
console.log(error); //gives an object at this point
this.showError(error);
}
);
}
我想在以下情况下打印错误消息Invailid网址。 当我打印错误时,我得到一个对象(可能是响应对象),如下所示:
Object { _body: error, status: 200, statusText: "Ok", headers: Object, type: 3, url: null }
如果我打开它,我找不到错误信息。有没有更好的方法来获取precies错误消息?
答案 0 :(得分:9)
即使在这种情况下,错误也包含在响应正文中。请参阅错误事件处理程序onError函数:
您可以使用响应中的json方法访问它:
error => {
this.error = true;
console.log(error.json()); //gives the object object
this.showError(error.json());
}
修改强>
我对此问题进行了更多调查。实际上,您无法获得确切的消息。我的意思是net::ERR_NAME_NOT_RESOLVED
。 XHR不提供它。也就是说,您可以看到XHR的status
为0
。这可能暗示发送请求时请求有问题(实际上并未发送)。
error => {
(...)
var err = error.json();
var status = err.currentTarget.status;
(...)
}
看到这个问题:
答案 1 :(得分:2)
我尝试error.error并为我工作。它得到对象消息错误。
编辑:
对不起!
尝试一下:
error => {
this.error = true;
console.log(error.error);
this.showError(error.error);
}
答案 2 :(得分:0)
使用Angular 5+,您实际上可以只使用error.message
。
error => {
console.log(error.message);
this.showError(error.message);
}
就我而言,我正在使用带有警报的Ionic 3
error => {
loading.dismiss();
let alert = this.alertCtrl.create({
title: 'Error: ',
message: error.message,//Displays http error message in alert
buttons: [
{
text: 'Dismiss',
role: 'Yes',
handler: () => {}
}
]
});
alert.present();
}
答案 3 :(得分:0)
您可以对错误对象进行字符串化以打印其字符串值
const errStr = JSON.stringify(error);
console.log(errStr);