Я создаю приложение Node.js, и у меня есть функция setInterval
, которая запускается каждые 5 секунд.Моя проблема в том, что эта функция должна быть запущена до того, как любой из моих маршрутов сработает в этом файле.
Мне нужно сразу запустить setInterval при запуске приложения, а затем запускать каждые 5 секунд после этого.
До сих пор я пытался установить setInterval на меньшее значение, но это слишком сильно влияет на мою внешнюю службу, так как этот формат кода будет использоваться в куче файлов (~ 30).
var express = require('express');
var router = express.Router();
const config = require("../config/config");
const request = require("request");
var consul = require("consul")({host: '10.0.1.248'});
var consulBase = [];
var options;
setInterval(() => {
consul.catalog.service.nodes('auth', function(err, results) {
if(err) {console.log(err); throw err;}
if(results.length <= 0) throw 'Unable to find any services with that name.. exiting process...';
if(results.length > 0) consulBase = [];
results.forEach((result) => {
consulBase.push(result.ServiceAddress+ ':' +result.ServicePort);
});
var serviceURL = 'http://' + consulBase[Math.floor(Math.random()*consulBase.length)];
options = {
baseUrl : serviceURL
};
});
}, 5 * 1000);
router.get('/login', (req, res) => {
request.get(req.path, options, (error, response, body) => {
if (error) throw error;
res.send(body);
});
});
module.exports = router;
Я был бы готов поместить это в другой файл и затем представить его в виде функции, которая принимает имя службы и выдает переменную options
с нужными мне данными.Не уверен, как бы я это сделал.