无法在角度5中获得响应标题

时间:2018-08-22 16:29:45

标签: javascript angular http post request

我向服务器发出发布请求,该服务器以对客户端重要的两个标头进行响应:用户名和访问令牌。 Chrome调试工具的“网络”标签显示以下数据作为响应: enter image description here

我还在控制台上记录了响应: enter image description here

此处不包含标题-为什么会这样? 我的记录代码:

this.usersService.registerNewUser(firstName, lastName, email, username, birthday, password).subscribe(
          res => {
            console.log(res);
          },
          err => {
            console.log("Error" + JSON.stringify(err));
          }
        );

我想通过res.headers.username访问标头用户名。

我的请求如下:

this.http.post<string>(
      "http://localhost:2002/users",
      JSON.stringify({
        firstName: firstName,
        lastName: lastName,
        email: email,
        username: username,
        birthday: birthday,
        password: password
      }),
      {
        observe: "response"
      }
    );

我做错了什么?

3 个答案:

答案 0 :(得分:3)

除非后端允许,否则前端将无法访问该标头。

为此,您需要从后端发送一个Access-Control-Expose-Headers标头,并且该值应该是要公开的值的逗号分隔列表,即access-token, username

答案 1 :(得分:1)

通常,响应只是“身体”,而您需要“标题”。在您可以使用的资源上:

this.header = res.headers.get('header-name');

答案 2 :(得分:0)

只想提供其他信息。昨天花了这几个小时,变得疯狂了。

一旦您有access-control-expose-headers来自后端。而且,如果您仅打印像console.log(res)console.log(res.headers)这样的响应对象,则它不会显示标题,因为Angular使用了延迟加载。您需要明确说明您需要使用哪个console.log(res.headers.get('your-header'))

标头