我正在尝试将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));