在路由调用之前设置的选项

时间:2019-02-16 18:51:59

标签: javascript node.js express

我正在尝试将options对象传递给中间件以实现我的快速路由。我遇到的问题是,在我的函数可以运行之前,它会在中间件中填充变量,并用正确的数据填充对象。我需要知道如何使它不仅成为{},而且要充满我需要的数据。

我认为当我获得第一部分时会遇到的另一个问题是,我有一个填充options的函数,我需要每5秒运行一次,然后每次填充options对象并需要在我的中间件中进行更新。想法是我将从Consul中提取IP /端口,并希望将它们传递到我的中间件中使用。

我知道async / await,但是我无法使其正常工作,因此在移动使用中间件而不是直接在路由上回调之前,我已经包含了以前的工作。

const config = require('../config/config');

const consul = require("consul")({host: config.consul.host});
let consulBase = [];
let options = {};


function consulQuery(service){
  consul.catalog.service.nodes(service, function(err, results) {
    if(err) {console.log(err); throw err;}
    if(results.length <= 0) return {message: `Error could not find any service of ${service} registered with consul,`, errorCode: 500};
    if(results.length > 0) consulBase = [];
    results.forEach((result) => {
      consulBase.push(result.ServiceAddress+ ':' + result.ServicePort);
    });
    let serviceURL = 'http://' + consulBase[Math.floor(Math.random()*consulBase.length)];
    options = {
      baseUrl : serviceURL,
      form: {'':''},
      headers: {authorization: ''}
    };    
  });
}

// Get options array right away
consulQuery('test');

// Get options array every 5 seconds
setInterval(() => {
  consulQuery('test');
}, 5 * 1000);

// GET TEST
router.get('/test', 
request(options));

0 个答案:

没有答案