标题未显示在获取响应中

4 javascript fetch node.js

我可以在Chrome DevTools中看到标题"x-auth-token". 在此输入图像描述

但是,标头未显示在我的提取响应中.请协助,以便我可以使用标题数据.

我使用NodeJS作为我的后端API,使用ReactJS作为我的前端.这些是我的文件.

NodeJS中间件 - cors.js

module.exports = function enableCorsSupport(app) {
  app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE");
    res.header("Access-Control-Allow-Headers", "Content-Type, x-auth-token");
    res.header("Access-Control-Expose-Headers", "x-auth-token");
    next();
  })
}
Run Code Online (Sandbox Code Playgroud)

NodeJS路由 - users.js

router.post('/login', async (req, res) => {

  // NOTE: code left out so post would be smaller

  const token = user.generateAuthToken();
  res.header('x-auth-token', token).send(_.pick(user, ['_id', 'firstName', 'email', 'isAdmin']));
})
Run Code Online (Sandbox Code Playgroud)

ReactJS - 我的获取请求

fetch('http://localhost:4000/api/users/login', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      email: this.props.email,
      password: this.props.password
    })
  })
  .then(res => {
    console.log('res.headers', res.headers)
    return res.json()
  })
  .then(data => {
    console.log(data);
  })
  .catch((err) => {
    console.log(err)
  })
}
Run Code Online (Sandbox Code Playgroud)

这是我成功提取请求中来自console.log的Chrome控制台.标头响应中的标头为空.请指教.仅供参考,这是用户测试数据. 在此输入图像描述

Pat*_*ans 13

标头的对象不为空.它不是常规对象,因此它的内容不是其实例上的属性.因此,您将无法在console.log视图中看到标头/值.

要获取特定标头的值,您需要使用该get()方法

var token = response.headers.get('x-auth-token');
console.log(token);
Run Code Online (Sandbox Code Playgroud)

你也可以使用for ...来循环它

for(let header of response.headers){
   console.log(header);
}
Run Code Online (Sandbox Code Playgroud)

演示

fetch('https://cors-anywhere.herokuapp.com')
.then(res=>{
  for(header of res.headers){
    console.log(`Name: ${header[0]}, Value:${header[1]}`);
  }
});
Run Code Online (Sandbox Code Playgroud)


小智 7

使用 Node.js 我找到了这个解决方案,使用了ExposureHeaders

const cors = require('cors');
const express = require('express');

// ..........

var app = express();
app.use(cors({
  exposedHeaders: ['x-auth-token'],
}));
Run Code Online (Sandbox Code Playgroud)

对于阅读,没关系:

x_auth_token = res.headers.get('x-auth-token');
Run Code Online (Sandbox Code Playgroud)

  • 解决了我的问题 (2认同)