NodeJs 中间件集标头

Posted

技术标签:

【中文标题】NodeJs 中间件集标头【英文标题】:NodeJs middleware set header 【发布时间】:2016-11-08 11:00:09 【问题描述】:

我想在中间件的标题中添加一个刷新令牌,如该问题的第一个答案所示:implementing refresh-tokens with angular and express-jwt

后端 - 中间件:

jwt.verify(token, config.secret, function(err, decoded) 
        if (err) 
            res.status(401);
            return res.json( success: false, message: 'Authentication failed' );
         else 
            var token_exp = new Date(decoded.exp * 1000);
            var date = new Date();
            var difference = (token_exp.getTime() - date.getTime()) / 60000;

            if(difference < (config.expireTimeToken / 2 ))
                var expires = config.expireTimeToken + 'm';
                var token = jwt.refreshToken(decoded);

                res.setHeader('Authorization', 'Bearer ' + token);
                next();
            else
                req.decoded = decoded;
                next();
            
        
    );

前端拦截器:

module.exports = function ($injector) 
    return 
        request: function (config) 

            var CoreService = $injector.get('CoreService');

            config.headers['x-access-token'] = CoreService.getToken();
            return config;
        , 
        response: function(response) 
            var receivedToken = response.headers('authorization');
            console.log(receivedToken);
            return response;
        
    ;
;

但是,每当我设置标头时,客户端的拦截器都不会收到它。当我在我的 npm 控制台中调试 res.header 时,设置的标头“授权”位于“_headers”而不是“标头”中。

我该如何解决这个问题。

【问题讨论】:

【参考方案1】:

在 express 中间件中,您可以使用 res.set(field, [value])res.header(field, [value])(相同功能的别名)设置标头。 setHeader 不是 express 方法,而是原生 node.js,我认为这可能会导致问题。

【讨论】:

我尝试了 set、header 和 setHeader 的各种组合,但都没有解决我的问题。

以上是关于NodeJs 中间件集标头的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NodeJS 中使用 JWT 令牌验证路由

未设置 Node.js 响应标头

带有标题集的流明/laravel中的CORS问题

如何使用中间件删除服务器标头?

Apollo GraphQL 的动态标头(中间件之外)

尽管我的服务器启用了标头,但 AJAX CORS 请求失败 - (Access-Control*)