responseType:“ json”标头,导致错误:类型“ Object”上不存在属性“ responseStatus”

时间:2018-11-30 14:18:30

标签: json angular http header response

我之前读过,如果您将responseType: "json"标头添加到您的http请求中,那么我想添加它会更安全。

但是,当我使用它时,将响应视为JSON(即带点符号)时会出错。

例如,当我尝试如下获取json响应的属性:res.responseStatus时,它将引发错误:

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

如果我从http请求中取出了responseType: "json"标头,则不会出错。

如果我留在responseType标头中,则可以通过以下符号获取响应中对象的属性:res["responseStatus"],并且这不会引发错误。 我只是想知道是否有人知道为什么。也许我想念一些东西。

谢谢

Http发布请求代码(来自ionic app-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 :(得分:0)

我假设您使用的是HttpClient

您需要将observe: 'response'添加到httpOptions以获得完整的响应。

我还将res的类型指定为HttpResponse。正如乔恩(Jon)在评论中所提到的那样,如果您在observe: 'response'中使用了httpOptions,则并不是必须的。

此外,您将获得的是status,而不是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;
    });
}