Я пытаюсь передать объект options
в промежуточное ПО для моего экспресс-маршрута.Проблема, с которой я сталкиваюсь, заключается в том, что она заполняет переменную в промежуточном программном обеспечении, прежде чем моя функция сможет работать и заполнить объект правильными данными.Мне нужно знать, как заставить его не просто быть {}
, а вместо этого быть заполненным необходимыми мне данными.
Еще одна проблема, с которой я столкнусь, когда получу эту первую часть, заключается в том, что у меня естьфункция, которая заполняет options
Мне нужно запускать каждые 5 секунд, а затем каждый раз заполнять объект options
и мне нужно обновить его в промежуточном программном обеспечении.Идея состоит в том, что я буду получать IP / порты от Консула и хочу передать их в свое промежуточное ПО для использования.
Я знаю об асинхронности / ожидании, но я не мог заставить это работать для меня, поэтому я включил то, что раньше работало, прежде чем перейти к использованию промежуточного программного обеспечения вместо обратного вызова непосредственно на маршруте.
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));