了解ExpressJS应用程序启动

时间:2016-06-07 10:21:12

标签: node.js express

我正在努力应用程序启动如何在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()之前是否编译脚本?如何在编译/加载其他文件之前确保我的配置已设置?

1 个答案:

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

如果这不起作用,则问题不在于执行顺序。