Как обращаться с кодами статуса http, отличными от 200 в Angular 2

Прямо сейчас, как я делаю http-запросы (заимствованные из этого ответа ), это:

POST(url, data) { var headers = new Headers(), authtoken = localStorage.getItem('authtoken'); headers.append("Content-Type", 'application/json'); if (authtoken) { headers.append("Authorization", 'Token ' + authtoken) } headers.append("Accept", 'application/json'); var requestoptions = new RequestOptions({ method: RequestMethod.Post, url: this.apiURL + url, headers: headers, body: JSON.stringify(data) }) return this.http.request(new Request(requestoptions)) .map((res: Response) => { if (res) { return { status: res.status, json: res.json() } } }); } 

Это прекрасно работает, за исключением того, что angular2 не будет работать, если возвращаемый код состояния – это что-то другое, чем 200. Например, если пользователь хочет что-то публиковать, а сервер возвращает 400, угловое 2 выдает исключение:

неперехваченное исключение: [object Object]

Как я могу избежать этого? Я бы хотел обработать эти коды состояния в своем приложении, чтобы улучшить пользовательский интерфейс (показать ошибки и т. Д.),

Да, вы можете обращаться с оператором catch таким образом и показывать предупреждение, как хотите, но во-первых, вам нужно импортировать Rxjs же, как этот путь

 import {Observable} from 'rxjs/Rx'; return this.http.request(new Request(this.requestoptions)) .map((res: Response) => { if (res) { if (res.status === 201) { return [{ status: res.status, json: res }] } else if (res.status === 200) { return [{ status: res.status, json: res }] } } }).catch((error: any) => { if (error.status === 500) { return Observable.throw(new Error(error.status)); } else if (error.status === 400) { return Observable.throw(new Error(error.status)); } else if (error.status === 409) { return Observable.throw(new Error(error.status)); } else if (error.status === 406) { return Observable.throw(new Error(error.status)); } }); } 

также вы можете передать ошибку (с блоком err), которая выбрасывается блоком catch в то время как функция .map ,

как это –

 ... .subscribe(res=>{....} err => {//handel here}); 

Обновить

как требуется для любого состояния без проверки участника, вы можете попробовать следующее:

 return this.http.request(new Request(this.requestoptions)) .map((res: Response) => { if (res) { if (res.status === 201) { return [{ status: res.status, json: res }] } else if (res.status === 200) { return [{ status: res.status, json: res }] } } }).catch((error: any) => { if (error.status < 400 || error.status ===500) { return Observable.throw(new Error(error.status)); } }) .subscribe(res => {...}, err => {console.log(err)} ); 
  • Угловой 2 Прокрутите вверх, чтобы изменить маршрут
  • Глобальные события в угловых
  • Цепочка RxJS Наблюдаемые данные http в Angular2 с использованием TypeScript
  • angular4 httpclient csrf не отправляет x-xsrf-токен
  • angular2 bootstrap с данными из ajax call (s)
  • Получение изображения из API в Angular 4/5 +?
  • Почему ng-scope добавлен в javascript внутри моего частичного представления и не делает предупреждение неработоспособным?
  • Как использовать ResolveComponentFactory (), но со строкой в ​​качестве ключа
  • Каков правильный способ обмена результатами сетевого звонка с угловым Http в RxJs 5?
  • Каково надлежащее использование EventEmitter?
  • Как получить параметры запроса от url в угловом 2?
  • Interesting Posts

    Подсчет количества файлов в каталоге с помощью Java

    Преобразовать System.Windows.Media.ImageSource в System.Drawing.Bitmap

    Сравнение служб отчетов SQL Server с Crystal Reports

    Экран (не блокировка экрана) Тайм-аут застрял на 1 минуту

    Git: Как найти коммит, который наиболее точно соответствует каталогу?

    Сканер next () бросает NoSuchElementException для некоторых онлайн-компиляторов

    Linq to Objects – возвращает пары чисел из списка чисел

    Создание резервной копии базы данных на SDCard на Android

    Обновите Android SDK Tool до 22.0.4 (последняя версия) с 22.0.1

    Показывать сообщения из других папок в режиме разговора в Outlook for Mac 2011

    Пользовательские заголовки предпочтений

    Flac2mp3 на mac?

    Как перемещать невидимые окна => Не удается получить доступ к моему приложению после переключения мониторов

    Как вы используете переменные в простом сценарии PostgreSQL?

    OpenVPN: трассировать только определенные IP-адреса через VPN?

    Давайте будем гением компьютера.