我正在努力应用程序启动如何在Express中运行。我将解释我的用例:
我有一个配置管理器模块,所有其他应用程序模块都使用它来加载所需的配置。我在app.listen
中设置配置:
app.listen(9000, function () {
try
{
config_manager.setSiteConfig();
console.log('settings..!!!')
}
catch(err)
{
console.log(err.stack);
}
});
在同一应用程序的另一个模块中,我调用Configuration-Manager函数来加载config,但它返回空。代码是这样的:
var config_manager = require('configuration-manager');
console.log(config_manager.loadConfig()); // returns empty object {}
我正在使用node app.js
运行该应用程序。首先打印空对象,然后打印('settings..!!!')
。 Express在调用app.listen()
之前是否编译脚本?如何在编译/加载其他文件之前确保我的配置已设置?
答案 0 :(得分:0)
Express确实首先处理文件中的所有语句,基本上是启动时函数中没有的任何语句。
在您的情况下,var config_manager = require('configuration-manager');
console.log(config_manager.loadConfig()); // returns empty object {}
会在app.listen
之前执行,因为您要求app.listen
之前的配置。
您最好在第一次配置后立即处理配置(如果app.js
是您的主文件,这意味着第一次遇到指向require
的{{1}}语句任何文件中都有configuration-manager
。
这应该使您的代码有效:
var config_manager = require('configuration-manager');
try {
config_manager.setSiteConfig();
} catch(err) {
console.log(err.stack);
}
console.log(config_manager.loadConfig()); // returns empty object {}
然后
app.listen(9000, function () {
console.log('settings..!!!', config_manager.loadConfig()) // Should correctly print your config
});
如果这不起作用,则问题不在于执行顺序。