中间件,用于在节点js中发送带有所有出站请求的授权令牌

时间:2018-03-19 03:09:43

标签: node.js express middleware

我有一个Express api,它将请求发送到其他api以获取信息.Token是jwt,每分钟到期。所以从技术上讲,我必须在每个出站请求的标题中附加新标记。有没有办法在所有出站请求的标头中附加授权令牌。

route.js文件:

'use strict';
  router.get('/api/request', function (req, res) {
     var Client = require('node-rest-client').Client;
     var client = new Client();


     client.post("http:/localhost:3000/client", args, function (data, response) {
         console.log(response.status);
      });

  });

  server.use(router);
};

这是来自api的其他服务模块之一的样本发布请求。与此类似,还有其他几项要求。我想在标题中添加授权令牌,用于从此api发出的所有请求。

1 个答案:

答案 0 :(得分:0)

尝试此操作,为所有API调用创建一个入口点(服务)并在那里进行验证。如果令牌在45秒之前创建,则使用相同的其他值重新生成并使用。

const Client = require('node-rest-client').Client;
const HttpService = (method, url, args) => {
    return new Promise((resolve, reject) => {
        var client = new Client();
        if (method == 'POST') {
            client.post(url, args, function (data, response) {
                // If err  reject(err)
                resolve(response);
            });
        }
        // Same for get and other
    });
}

let basetoken, tokenExpire = Date.now() + 1000 * 45;
const getToken = async () => {
    // Check token is generated before 45 Seconds or not
    if (!basetoken || tokenExpire < Date.now()) { 
        basetoken = await HttpService('POST', 'Token URl', 'SomeData');
        tokenExpire = Date.now() + 1000 * 45; // Token validity you can change this to some value
    }
    return basetoken;
}

const HttpPost = async (url, data) => {
    const token = await getToken();
    data.headers = {Token : token};
    const data = await HttpService('POST', url, data);
    return data;
}

module.exports ={ HttpPost }