2016-06-07 26 views
1

我很担心应用程序启动在Express中的工作方式。我将解释我的用例:了解ExpressJS应用程序启动

我有一个配置管理器模块,供所有其他应用程序模块使用来加载所需的配置。我设置配置app.listen

app.listen(9000, function() { 
    try 
    { 
     config_manager.setSiteConfig(); 
     console.log('settings..!!!') 
    } 
    catch(err) 
    { 
     console.log(err.stack); 
    } 
}); 

在同一个应用程序我所说的配置管理器功能加载配置的另一个模块,但它返回空。代码是这样的:

var config_manager = require('configuration-manager'); 
console.log(config_manager.loadConfig()); // returns empty object {} 

我使用node app.js运行应用程序。首先打印空物体,然后('settings..!!!')。在致电app.listen()之前,Express是否编译脚本?如何在编译/加载其他文件之前确保我的配置已设置?

回答

0

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

如果这不起作用的问题,执行的顺序没有规定。

+0

配置被加载到单独的文件(其他然后app.js)。我将配置文件设置为在app.listen中加载 –