Javascript AngularJS不发送授权或任何额外的键/值头

Javascript AngularJS不发送授权或任何额外的键/值头,javascript,angularjs,node.js,express,jwt,Javascript,Angularjs,Node.js,Express,Jwt,我正在使用带有Nodejs和Angular JS的JWT令牌。我找到了$httpProvider在每个请求上设置头的方法。但是没有发送头。我的NodeJS应用程序在访问该标题时未定义 我的角码 用于设置授权令牌- 这是我的HTTP请求 $scope.getSearcHistory = function(){ console.log($localStorage.token); console.log( $rootScope.getCurrentUser()); $htt

我正在使用带有Nodejs和Angular JS的JWT令牌。我找到了$httpProvider在每个请求上设置头的方法。但是没有发送头。我的NodeJS应用程序在访问该标题时未定义

我的角码

用于设置授权令牌-

这是我的HTTP请求

$scope.getSearcHistory = function(){
     console.log($localStorage.token);
     console.log( $rootScope.getCurrentUser());
    $http({
        url: baseUrl+'userSearches/2',
        method : 'GET',
        headers: {
            'key': '1234424252'
        }
    })
    .success(function(data, status, headers, config){
        console.log(data);
        $scope.searches = data;
    })
    .error(function(data, status, headers, config){
        console.log(status);
    });
}
这是我的NodeJS控制器

this.router.use(function(req, res, next){
        console.log(req.headers);
        var bearerToken;
        var bearerHeader = req.headers.authorization;
        console.log(bearerHeader)
        if (typeof bearerHeader !== 'undefined') {
            var bearer = bearerHeader.split(" ");
            bearerToken = bearer[1];
            req.token = bearerToken;
            next();
        } else {
            res.send(403).json({"Authorization": "Not allowed"});
        }
    });
这是我的节点控制台,请看没有我需要的头--


根据你的代码,似乎你不应该有任何问题。理想情况下,您在angular中所做的工作应该为您提供自定义标题

$http({
    method: 'GET',
    url: '/api',
    headers: {
        'Authorization': 'test',
        'Accept': 'application/json',
        "X-Test-Header": 'true'
    }
}).then(function(response) {
    if (response.data == 'ok') {
        // success
    } else {
        // failed
    }
});
你能不能检查一下你的控制台,看看你是否得到了标题

如果这甚至不起作用,那么您可能需要将节点设置为允许所有标题

var allowCrossDomain = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
};
并在应用程序中进行配置

app.configure(function () {
  app.use(app.router);
  app.use(allowCrossDomain);
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
所有这些只是处理是否可以发送自定义头。如果您正在使用身份验证令牌,则需要在$http中正确设置它,以便每次发出请求时都可以发送它。为此,您可能希望包括

$http.defaults.headers.common['x-access-token'] = jwt

希望这有帮助。

问题是,当我在Express app中获取标题时,请检查我的问题
访问控制请求标题:“授权,密钥”
,但我req.headers.authorization和req.headers.key都未定义。我的意思是如何访问该值?如果在req.headers上打印,那么得到的值是什么?我问题的最后一个代码块是
控制台.log(req.headers
)对不起,我一定错过了。您是否尝试复制我提供的相同标题。我尝试了同样的方法,但我无法重现这个错误。此外,请尝试更新您的
授权
,因为它区分大小写。
app.configure(function () {
  app.use(app.router);
  app.use(allowCrossDomain);
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
$http.defaults.headers.common['x-access-token'] = jwt