在Angular 4 HttpClient中如何收到状态码?

问题描述 投票:0回答:2

要获取我正在做的数据:

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

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

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

但这正在取代我的httpOpttions,这将使我未经认证。我不能像GET那样在POST上添加另一个论点。请帮忙!

angular angular-httpclient
2个回答
2
投票

您无法向http.get添加第三个参数的原因是因为它不接受第三个参数。 observe“syntax”是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"字段。

编辑

要使此方法起作用,您需要向编译器“撒谎”有关observe的类型以允许它进行编译。您可以通过在as any对象中将"response"添加到httpOptions的末尾来执行此操作:

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

这是需要的原因是因为TypeScript无法正确推断原始httpOptions对象的类型(它希望"response"是文字"body")。告诉TypeScript将"response"解释为any解决了这个问题。


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)} );

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

© www.soinside.com 2019 - 2024. All rights reserved.