从Angular 2 http获取错误消息

时间:2016-02-27 11:23:05

标签: http angular

我的服务中有以下代码

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错误消息?

4 个答案:

答案 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的status0。这可能暗示发送请求时请求有问题(实际上并未发送)。

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();
             }

以下是登录时控制台中错误对象的摘要: enter image description here

答案 3 :(得分:0)

您可以对错误对象进行字符串化以打印其字符串值

const errStr = JSON.stringify(error);
console.log(errStr);