в Angular 4 HttpClient, как я могу получить код состояния? - PullRequest
0 голосов
/ 15 февраля 2019

Для получения данных я делаю:

data = this.http.get(url, httpOptions);

Но это только возвращение тела.Мне нужен полный ответ, чтобы получить статус.Я знаю этот синтаксис:

data = this.http.get(url, {observe: 'response'});

Но это заменяет мой httpOpttions, что сделает меня неаутентифицированным.Я не могу добавить еще один аргумент в GET, как могу в POST.Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Причина, по которой вы не можете добавить третий параметр в http.get, заключается в том, что он не принимает третий параметр.observe «синтаксис» является частью параметра httpOptions, поэтому все, что вам нужно сделать, это объединить то, что находится в вашем httpOptions объекте, с {observe: "response"}

Например, если ваш httpOptionsвыглядит так:

const httpOptions = {
  headers: {
    "Content-Type": "application/json"
  }
}

Вы можете комбинировать это с объектом observe, указанным выше, следующим образом:

const httpOptions = {
  headers: {
    "Content-Type": "application/json"
  },
  observe: "response"
}

Если вы принимаете httpOptions в качестве аргумента (так что вы можете 'Чтобы создать новый с нуля, как в предыдущем примере), вы можете просто написать поле observe непосредственно на нем:

httpOptions.observe = "response"

Любой из этих методов сохранит ваш текущий объект httpOptions и добавитполе observe: "response" к нему.

EDIT

Чтобы этот метод работал, вам нужно будет "лгать" компилятору о типе observeчтобы позволить ему скомпилировать.Вы можете сделать это, добавив as any к концу "response" в вашем httpOptions объекте:

const httpOptions = {
  headers: {
    "Content-Type": "application/json"
  },
  observe: "response" as any
}

Причина, по которой это необходимо, заключается в том, что TypeScript не может определить тип вашего raw httpOptions объект правильно (он хочет, чтобы "response" был литералом "body").Использование TypeScript для интерпретации "response" как any решает эту проблему.

0 голосов
/ 15 февраля 2019

Используйте этот код для получения статуса.

Обновлено [15/02/19]:


getOptions = {
  headers: new HttpHeaders({
    'Content-Type': 'application/json;charset=UTF-8',
    "authToken": this.token // contains the authToken as parameter in request header 
                            // of http.get method for authorisation.
  })
};

// For getting the whole response of the request including status code etc.
getOptions['observe'] = 'response';


return this.http.get(url, getOptions)
         .pipe(
           catchError(this.handleError)
         )
         .subscribe(res => {
             console.log(res);
           },
           err => {console.log(err)} );

Приведенный выше обновленный код приведет к выдачевесь ответ

...