我正在为如何在Express中启动应用程序而苦苦挣扎。我将解释我的用例:
我有一个configuration-Manager模块,所有其他应用程序模块都使用它来加载所需的配置。我正在app.listen中设置配置
app.listen(9000, function () {
try
{
config_manager.setSiteConfig();
console.log('settings..!!!')
}
catch(err)
{
console.log(err.stack);
}
});在同一应用程序的另一个模块中,我调用Configuration-Manager函数来加载配置,但它返回空。代码是这样的:
var config_manager = require('configuration-manager');
console.log(config_manager.loadConfig()); // returns empty object {}我正在使用node app.js运行应用程序。首先打印空对象,然后打印('settings..!!!')。Express会在调用app.listen()之前编译脚本吗?如何确保在编译/加载其他文件之前设置了我的配置?
发布于 2016-06-07 19:57:26
Express的确首先处理文件中的所有语句,基本上是启动时不在函数中的所有语句。在本例中,var config_manager = require('configuration-manager'); console.log(config_manager.loadConfig()); // returns empty object {}在app.listen之前执行,因为您在app.listen之前重新请求配置。
您最好在第一次需要配置之后立即处理它(如果app.js是您的主文件,这意味着它第一次在任何文件中遇到指向configuration-manager的require语句)。
这应该会让你的代码正常工作:
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
});如果这不起作用,那么问题不在于执行的顺序。
https://stackoverflow.com/questions/37676674
复制相似问题