如何在nodejs中获取头请求

时间:2016-12-23 11:42:47

标签: javascript jquery node.js authentication express

目前正在开发elasticsearch API应用程序,我需要从服务器端的AJAX调用中获取头请求。下面给出了Ajax请求。

$.ajax({
          url: 'http://localhost:3002/api/v1/getAutoSuggest/'+elasticsearchIndex+'/'+elasticsearchType,
          dataType: 'JSONP',
          type: 'GET',
          beforeSend: function(xhr){xhr.setRequestHeader('access-control-request-headers', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9');},
          success: function (data) {

          }
});

在nodejs中,我试图使用 req.headers [' x-access-token'] ,但无法获得它。

var checkToken = app.use(function(req, res, next) {
var token = req.param.token || req.headers['x-access-token'];

  if (token) {
    jwt.verify(token, config.secret, function(err, decoded) {      
      if (err) {
        return res.json({ success: false, message: 'Failed to authenticate token.' });    
      } else {

   req.decoded = decoded;    
        next();
      }
    });

  } else {
  }
});

我还在nodejs服务器端添加了以下语句。

 var allowedOrigins = ['http://127.0.0.1:8000', 'http://localhost:8000', 'http://127.0.0.1:9000', 'http://localhost:9000'];
     var origin = req.headers.origin;
     if(allowedOrigins.indexOf(origin) > -1){
       res.setHeader('Access-Control-Allow-Origin', origin);
     }

    res.header('Access-Control-Allow-Methods', 'GET, OPTIONS');
res.header('Access-Control-Allow-Headers', 'access-control-request-headers');
    res.header('Access-Control-Expose-Headers', '*');
    res.header('Access-Control-Allow-Credentials', true);

但是以小写eyjhbgcioijiuzi1niisinr5cci6ikpxvcj9获取令牌。

提前致谢!

1 个答案:

答案 0 :(得分:1)

使用JSONP时无法设置标题。原因是当使用JSONP进行跨域请求时,jquery通过向DOM中注入特殊的<script>标记来实现此目的,以便加载远程资源。如您所知,使用<script>代码时,您无法指定自定义标头。

JSONP的另一种方法是使用CORS。服务器需要支持它并明确允许需要设置的起源和标题。