responseType: заголовок «json», вызывающий ошибку: свойство «responseStatus» не существует для типа «Object» - PullRequest
0 голосов
/ 30 ноября 2018

Я читал ранее, что это более безопасно, если вы добавляете заголовок responseType: "json" к вашим запросам http, поэтому я хотел бы добавить его.

Однако, когда я его использую, при обработке ответа я получаю ошибкукак JSON (то есть с точечной нотацией).

Например, когда я пытаюсь получить свойство ответа json следующим образом: res.responseStatus, выдается ошибка:

"Property 'responseStatus' does not exist on type 'Object'."

Если я извлекаю заголовок responseType: "json" из запроса http, я не получаю сообщение об ошибке.

Если я укажу в заголовке responseType, я смогу получить свойства объекта в ответе в следующей записи: res["responseStatus"], и это не приведет к ошибке.Мне просто интересно, если кто-нибудь знает почему.Может быть, я что-то упускаю.

Спасибо

Http пост-запрос кода (из ионного приложения-angular 5)

  login(loginData): Observable<any>{   
    return this.http.post("http://localhost/api/auth", 
        {"emailAddress": loginData.emailAddress, "password": loginData.password},
        {"headers": { "Content-Type": "application/json;charset=utf-8"}, responseType: "json"})
    .map(res => {
      if(res.responseStatus === "success"){
          //Throwing error: "Property 'responseStatus' does not exist on type 'Object'."
          //but If I say res["responseStatus"] instead this does not throw error.
          //Or If I take out the responseType header, I can use the dot notation.
      }
      return res;
    });
  }

1 Ответ

0 голосов
/ 30 ноября 2018

Я предполагаю, что вы используете HttpClient.

Вам нужно будет добавить observe: 'response' на httpOptions, чтобы получить полный ответ.

Я также указал тип res как HttpResponse.Как упоминал Джон в своих комментариях, в действительности это не требуется, если вы использовали observe: 'response' в httpOptions.

Кроме того, вы получите status BTW, а не responseStatus.

Попробуйте:

login(loginData): Observable < any > {

  const httpOptions = {
    headers: new HttpHeaders({
      'Content-Type': 'application/json;charset=utf-8'
    }),
    observe: 'response',
    responseType: "json"
  };

  return this.http.post("http://localhost/api/auth", loginData, httpOptions)
    .map((res: HttpResponse) => {
      if (res.status === 200) {
        ...
      }
      return res;
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...