Angular 2 http service. Получить подробную информацию об ошибке

Выполнение Angular2 http-вызова на автономном сервере не предоставляет много информации об этом объекте "error response". Я получаю в операторе Observable.catch(error) или делегировании ошибки отправки (они оба имеют одинаковый информация фактически). Но, как вы можете видеть на снимке экрана консоли, фактическая ошибка отображалась zone.js каким-то образом. Итак, как я могу получить эту конкретную информацию об ошибке (net:: ERR_CONNECTION_REFUSED)?

Спасибо. введите описание изображения здесь

Ответ 1

Всякий раз, когда сервер не отвечает, response.status всегда будет равен 0 (ноль)

{
  type: 3, //ResponseType.Error
  status: 0, // problem connecting endpoint
}

Также обратите внимание, что когда вы выполняете запрос CORS, но источник (url в браузере) не авторизован (не в разрешенном списке имен хостов, настроенных в удаленной конечной точке), ответ будет похож на предыдущий, с исключением атрибута type, который будет равна 4 = ResponseType.Opaque...

Это означает, что соединение было выполнено, но, например, запрос OPTIONS, возвращенный с заголовками, которые не содержат запрос о начале или HTTPS, выполнялся из источника HTTP.

Ответ 2

Вы можете обрабатывать сообщения об ошибках, чтобы их было легче читать. Это также может быть расширено:

public Get() {
    return this.http.get(this.URL).map(this.extractData)
        .catch(this.handleError);
}

public extractData(res: Response) {
    let body = res.json();
    return body || {};
}

public handleError(error: any) {
    let errMsg = (error.message) ? error.message :
        error.status ? `${error.status} - ${error.statusText}` : 'Server error';
    console.error(errMsg);
    return Observable.throw(errMsg);
}

Проверьте эту часть документов при обработке ошибок.

Ответ 3

Не копаясь в коде, я ожидаю, что, если сервер недоступен, на сервер не может быть возвращен ответ. Поэтому объект Response остается его инициализированным состоянием.