node.js - 如何延迟执行 NodeJS/Express 直到配置加载

标签 node.js express

我正在开发一个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;
....

最佳答案

最简单的方法是配置让其他模块知道它何时完成。

配置模块的导出应该是一个接受回调的函数,而不是不返回任何内容。当模块加载完成(或者已经加载)时,回调将执行。该代码类似于:

// 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
})

关于node.js - 如何延迟执行 NodeJS/Express 直到配置加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16619572/

相关文章:

node.js - Node 和nodejs有什么区别

android - ionic 运行 android - 错误 : Cannot find module 'internal/fs' - windows

node.js - 使用 Mongoose 和 Redux 删除记录

Node.js 对需要证书的服务器进行 Rest 调用

node.js - 在 Node api 中配置 socket.io

node.js - 如何知道 express 仍在处理多少请求?

javascript - 我如何使用 Mongoose 确定用户是否喜欢帖子

node.js - 无法使用 npm 安装任何东西( react )

node.js - 使用快速验证器 typescript 定义

javascript - 找不到模块 'require'