Получить сообщение об ошибке из Angular 2 http

У меня есть следующий код в моей службе

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 url. Когда я печатаю ошибку, я получаю объект (возможно, объект ответа), как показано ниже:

Object { _body: error, status: 200, statusText: "Ok", headers: Object, type: 3, url: null }

Если я открою это, я не могу найти сообщение об ошибке. Есть ли лучший способ получить сообщения об ошибках?

Ответ 1

Ошибка содержится в теле ответа даже в этом случае. См. Обработчик события ошибки onError:

Вы можете получить к нему доступ, используя метод json для ответа:

error => {
  this.error = true;
  console.log(error.json()); //gives the object object
  this.showError(error.json());
}

Edit

Я немного изучил эту проблему. Фактически, у вас не может быть точного сообщения. Я имею в виду net::ERR_NAME_NOT_RESOLVED. XHR не предоставляет его. Тем не менее, вы можете видеть, что status XHR 0. Это может быть намеком на то, что возникла проблема с запросом при отправке запроса (он фактически не отправлен).

error => {
  (...)
  var err = error.json();
  var status = err.currentTarget.status;
  (...)
}

Смотрите этот вопрос:

Ответ 2

Я пытаюсь error.error и работаю со мной. Его получить сообщение об ошибке объекта.

РЕДАКТИРОВАТЬ:

Сожалею!!

Попробуй это:

            error => {
                this.error = true;
                console.log(error.error); 
                this.showError(error.error);
            }

Ответ 3

Используя Angular 5+, вы можете просто использовать error.message.

 error => {
                console.log(error.message); 
                this.showError(error.message);
          }

Ответ 4

Вы можете зашифровать объект ошибки, чтобы напечатать его строковое значение

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