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