2013-05-18 4 views
1

Я работаю над приложением expressjs, которое загружает данные конфигурации из удаленного хранилища данных. У меня есть код конфигурации в модуле.Как отложить выполнение NodeJS/Express до загрузки конфигурации

Модули, которые мне требуются после того, как требуется модуль конфигурации в основном экспресс-приложении, также зависят от выполненного запроса конфигурации.

Есть ли способ приостановить запуск экспресс-приложения до тех пор, пока модуль конфигурации не будет завершен? Или способ гарантировать, что config был загружен до того, как остальная часть приложения будет продолжена. Я бы предпочел не включать логику в каждый модуль, чтобы проверить, что config был загружен.

// config.js 
var zmq = require('zmq'); 
var sock = zmq.socket('req'); 
sock.connect(endpoint); 
sock.send('config'); 
sock.on('message', function(data) { 
    module.exports = JSON.parse(data.toString()); 
}); 

// server.js Main application 
.... 
var config = require('./config'); // contains connection information for DB, 3rd party apps, etc... 
var db = require('./db'); // Uses the config to know where to connect 
var logger = require('./logger'); 
.... 
var debug = config.isDebug; 
... 


// db.js module 
var config = require('./config'); 
var host = config.host 
var port = config.port 
.... 


// logger.js module 
var config = require('./config'); 
var logLevel = config.logLevel; 
.... 
+0

'module.exports =' в функции обратного вызова, кажется, не имеет смысла для меня – caub

ответ

1

Самый простой способ - это конфигурировать, чтобы другие модули знали, когда это будет сделано.

Вместо того, чтобы ничего не возвращать, экспорт конфигурационного модуля должен быть функцией, которая принимает обратный вызов. Когда модуль загружается (или если он уже загружен), выполняется обратный вызов. Этот код будет нечто вроде:

// db.js module 
var config = require('./config'); 
config(function(err, config) { 
    if(err) throw err; // could not load configuration 
    var host = config.host 
    var port = config.port 
}) 
+0

Downvoter - уход объяснить, почему? –

Смежные вопросы