Невозможно получить пользовательские заголовки в ответе react

#node.js #express #reactjs #cors #reactjs-flux

#node.js #экспресс #reactjs #cors #reactjs-flux

Вопрос:

У меня есть интерфейс, работающий в react flux node, и серверная часть, работающая на Java. Я использую суперагент для отправки запросов от действия react в серверную часть, что успешно происходит, и я пытаюсь отправить пользовательские заголовки из серверной части, которая также работает нормально и отправляется из серверной части во внешний интерфейс, как я вижу в сетях браузеров (отладка запроса и ответа).Однако, когда я пытаюсь получить доступ к заголовкам в действии react, я этого не вижу.Может кто-нибудь, пожалуйста, подскажите мне, как я могу справиться с этим?

Пользовательский заголовок, к которому я хочу получить доступ, — это X-Token, но я не вижу его в ответе суперагента в действии react. Функция действия react выглядит следующим образом:

 login(payload) {
        request.post(someurl '/login')
            .send({
                username: payload.userEmail,
                password: payload.userPassword
                })
            .set('Accept', 'application/json')
            .end(function(err, res){
                if (err || !res.ok) {

                } else {
                    console.log(res.headers) //it doesnt give x-token header.

                }
            });
    }
}
 

Ниже приведен мой серверный js-контент:

 var app = express();
app.options('*', cors());

app.set('port', process.env.PORT || 3001);
app.use(compression());
app.use(logger('dev'));
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());

app.use(function (req, res, next) {
         // Website you wish to allow to connect
         res.setHeader('Access-Control-Allow-Origin', '*');

         // Request methods you wish to allow
         res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

         // Request headers you wish to allow
         res.setHeader("Access-Control-Allow-Headers", "X-Token,Origin,X-Requested-With,content-type");

         // Set to true if you need the website to include cookies in the requests sent
         // to the API (e.g. in case you use sessions)
         res.setHeader('Access-Control-Allow-Credentials', true);

         // Pass to next layer of middleware
         next();
     });


app.use(express.static(path.join(__dirname, 'public')));

app.engine('html', consolidate['swig']);
app.set('view engine', 'html');
app.set('views', './views');


 app.use(function(req, res) {
   Router.match({ routes: routes.default, location: req.url }, function(err, redirectLocation, renderProps) {
     if (err) {
       res.status(500).send(err.message)
     } else if (redirectLocation) {
       res.status(302).redirect(redirectLocation.pathname   redirectLocation.search)
     } else if (renderProps) {
       var html = ReactDOM.renderToString(React.createElement(Router.RoutingContext, renderProps));
       var page = swig.renderFile('views/index.html', { html: html });
       res.status(200).send(page);
     } else {
       res.status(404).send('Page Not Found')
     }
   });
 });

require('./app/routes/server-route')(app, express);
var server = require('http').createServer(app);


server.listen(app.get('port'), function() {
   console.log('Express server listening on port '   app.get('port'));
});
 

Заранее спасибо за помощь.

Ответ №1:

Вы уверены? setHeader

экспресс-документация api для заголовка есть setHeaders .

Комментарии:

1. @Damiem Leroux Спасибо за ваш ответ. Но когда я увидел другой пример, я смог увидеть приведенный выше способ настройки заголовков. Не могли бы вы привести мне какой-нибудь пример альтернативного подхода?

2. вызываемые функции зависят от версии ‘express’, которую вы используете. В вашем случае, какую версию вы используете?

3. Спасибо. Версия express — 4.14.0. Не могли бы вы подсказать мне, как решить проблему. Я знаю, что нам нужно настроить cors, но приведенная выше конфигурация не работает для меня.