繁体   English   中英

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

[英]How to get the response header of a HttpClient.Post request in Angular

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

我已经尝试过使用许多Google答案,但是都没有用。我无法在service.ts文件中使用subscribe,因为我在component.ts文件中遇到错误,因为我们不能两次使用subscribe

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

}

预期结果 :

需要获取上述api的“响应头”。 注意 :“响应头”的意思是-内容长度,令牌,Content-Type,Etag等

实际结果 :

我只得到这个的标题而不是标题

我的理解是您想要:

  • 发送post请求并检索数据
  • 而且还可以访问服务器响应的标头。

如果是这样,则应考虑使用httpOptions = { observe: 'response' }调用HttpClient.post() 这样, HttpClient.post()将返回一个类型为HttpResponseObservable而不是仅返回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
  ...

});

更新

或在service method ,该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;
      })
  )
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM