1

我正在开发一个从远程数据存储加载配置数据的 expressjs 应用程序。我在一个模块中拥有所有配置代码。

在我需要主 express 应用程序中的配置模块之后我需要的模块也取决于正在完成的配置请求。

有没有办法暂停 express 应用程序的启动,直到配置模块完成?或者一种保证在应用程序的其余部分继续之前已经加载配置的方法。我宁愿不必在每个模块中添加逻辑来检查配置是否已加载。

// 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;
....
4

1 回答 1

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
})
于 2013-05-18T00:33:30.183 回答