如何在 Angular 中获取 HttpClient.Post 请求的响应头

Sud*_*hin 4 angular angular-httpclient

我正在使用 angular 7,我需要从服务文件中的给定 API 获取“响应头”,而不使用“订阅”。请帮助我

我尝试过使用许多谷歌答案,但没有一个有效。我无法在 service.ts 文件中使用订阅,因为我在 component.ts 文件中收到错误,因为我们无法使用订阅两次

login(email: string, password: string ) {
this.email = email;
this.password = password;


return this.http.post<any>(`this.url/auth/login`, { email, password})
.pipe(map(user => {
var currentuser:any = { user: user.user, token: user.token};
if (currentuser && user.token) {
localStorage.setItem('currentUser', JSON.stringify(currentuser));
this.currentUserSubject.next(currentuser);
 }
return user;
 }));
Run Code Online (Sandbox Code Playgroud)

}

预期结果 :

需要为上面的api获取“”响应头.. 注意:“响应头”的意思是——内容长度、令牌、Content-Type、Etag等

实际结果 :

我只得到正文而不是标题

Thi*_*lvo 8

我的理解是你想:

  • 发送post请求和检索数据
  • 但也可以访问服务器响应的标头。

如果这是真的,您应该考虑HttpClient.post()使用httpOptions = { observe: 'response' }. 有了这个,HttpClient.post()将返回一个Observable类型,HttpResponse而不仅仅是 JSON 数据。

推荐阅读Angular 官方文档

您的代码应如下所示:

this.http.post<HttpResponse<User>>(`${this.url}/auth/login`, { email, password }, 
  { observe: 'response' }).subscribe(response => {

  ...
  response.headers.keys(); // all header names
  ...
  response.body // response content
  ...

});
Run Code Online (Sandbox Code Playgroud)

更新

或者在 a 中service method,它只会检索一个User模型,但会对响应细节做一些事情,例如:(可能有错别字)

getUserFromLogin(email: string, password: string): Observable<User> {
  return this.http.post<HttpResponse<User>>(`${this.url}/auth/login`, 
    { email, password }, { observe: 'response' }).pipe(
      map(response => {

        ...
        response.headers.keys(); // all header names
        ...
        response.body // response content
        ...

        return response.body;
      })
  )
)
Run Code Online (Sandbox Code Playgroud)