在Angular 4 HttpClient中我如何接收状态代码?

时间:2019-02-14 22:10:31

标签: angular angular-httpclient

要获取我正在做的数据:

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

但这只是返回身体。我需要整个回复才能获得状态。我知道这种语法:

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

但这代替了我的httpOpttions,这将使我无法通过身份验证。我无法像在GET中那样在POST上添加另一个参数。请帮忙!

2 个答案:

答案 0 :(得分:1)

之所以不能向您的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字段:< / p>

httpOptions.observe = "response"

这两种方法都将保留当前的httpOptions对象,并向其中添加observe: "response"字段。

编辑

为使此方法起作用,您将需要对observe的类型“撒谎”到编译器以使其能够编译。为此,您可以在as any对象的"response"的末尾添加httpOptions

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

之所以需要这样做,是因为TypeScript无法正确推断原始httpOptions对象的类型(它希望"response"为原义"body")。告诉TypeScript将"response"解释为any可以解决此问题。

答案 1 :(得分:0)

使用此代码获取状态。

已于[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)} );

以上更新的代码将导致给出完整的响应