Заголовки не отображаются в ответе на выборку

Я вижу заголовок «x-auth-token» в Chrome DevTools. Заголовки не отображаются в ответе на выборку

Однако заголовок не отображается в моем ответе на выборку. Пожалуйста, помогите мне использовать данные заголовка.

Я использую 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();
  })
}

Маршрут 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']));
})

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.info('res.headers', res.headers)
    return res.json()
  })
  .then(data => {
    console.info(data);
  })
  .catch((err) => {
    console.info(err)
  })
}

Это находится в моей консоли Chrome из console.info в моем успешном запросе на выборку. Заголовки в ответе заголовка пусты. Пожалуйста, порекомендуйте. К вашему сведению, это данные пользовательского тестирования. Заголовки не отображаются в ответе на выборку

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
9
1
14 193
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Объект Заголовок не пустой. Это просто не обычный объект, поэтому он не имеет своего содержимого в качестве свойств в своем экземпляре. Таким образом, вы не увидите заголовки / значения в представлении console.info.

Чтобы получить конкретное значение заголовка, вам нужно использовать метод get()

var token = response.headers.get('x-auth-token');
console.info(token);

Вы также можете просмотреть его, используя for ... of

for(const header of response.headers){
   console.info(header);
}

Демо

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

С помощью Node.js я нашел это решение, используя visibleHeaders:

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

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

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

А для чтения нормально:

x_auth_token = res.headers.get('x-auth-token');

Решил мою проблему

Justin Waite 22.12.2018 03:49

Другой способ раскрытия заголовка x-auth-token -

  res
    .header("x-auth-token", token)
    .header("access-control-expose-headers", "x-auth-token")
    .json(data);

Другие вопросы по теме