Угловая информация об ошибке httpclient 6

У меня есть приложение Angular 6, и когда я делаю запрос http:

this.myService.login(this.form.email.value, this.form.password.value)
    .pipe(first())
    .subscribe(
         data => 
                {
                       //do something on success
                },
         error => 
                {
                     //here the response `error` if I use console.log(error)
                     //shows just Bad request if my API returns 404. 
                     //How can I access other properties of the error, like 
                     //the body?
                }
);

Как я могу получить доступ к другим свойствам ошибки, если HTTP-вызов возвращает ошибку?

В случае ошибки APi вернет 404 Bad Request, но будет также тело JSON:

{
    Status: "Error",
    Body : "Something happened"
}

Как я могу получить доступ к этому в моей обработке ошибок?

0 ответов

Вы можете сделать это таким образом (ПРОВЕРЕНО с угловой 6)

сначала вызовите API в другом классе, т. е. (вспомогательный сервис API)

MyApiCall(data:any) {
    return this.http.post('Your api url', data);
  }

в вышеуказанном методе не добавляйте .map или же .subscribe к методу http post

ТЕПЕРЬ, вызовите этот метод из класса вашего компонента, из которого вы собираетесь взаимодействовать с API

formSubmit() {
     // your logic
      this.apiservice.MyApiCall(apivalues)
        .subscribe(
          data => {
            let httpresponse = data;
            let response = data.json();
            if (httpresponse.status == 200) {
               // logic when success
              }
              else {
               // else
              }
            }
          }, err => {
            let httpresponse = err;
            let response = err.json();
            if (httpresponse.status == 0) {
                //if api is dead or couldn't reach
            }
            else {
              //for other request , 401 404 etc
            }
          });
    }
  }

чтобы получить коды успеха,

    let httpresponse = data;

^^ это позволит вам получить ответ http (статус, код, httpurl, другую информацию API)

    let response = data.json();

^^ это даст вам данные, созданные и отправленные API (фактический бизнес-ответ)

такая же логика с ошибкой

    let httpresponse = err;

    let response = err.json();

^^^ 1-я строка дает вам базовый http ответ ^^^ 2-я строка дает вам сообщение об ошибке, созданное в API (пользовательское тело)

Другие вопросы по тегам