Параметры устанавливаются перед тем, как маршрут называется - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь передать объект 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...