Node.js 了解ExpressJS应用程序启动

Node.js 了解ExpressJS应用程序启动,node.js,express,Node.js,Express,我正在为应用程序启动在Express中的工作方式而挣扎。我将解释我的用例: 我有一个configuration Manager模块,所有其他应用程序模块都使用它来加载所需的配置。我正在应用程序中设置配置。请收听: app.listen(9000, function () { try { config_manager.setSiteConfig(); console.log('settings..!!!') } catch(err)

我正在为应用程序启动在Express中的工作方式而挣扎。我将解释我的用例:

我有一个configuration Manager模块,所有其他应用程序模块都使用它来加载所需的配置。我正在
应用程序中设置配置。请收听

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()
之前编译脚本?如何确保在编译/加载其他文件之前设置了配置?

Express确实首先处理文件中的所有语句,基本上是启动时函数中没有的任何语句。 在您的情况下,
var config_manager=require('configuration-manager');
console.log(config_manager.loadConfig());//返回空对象{}
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
 });

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

Express确实首先处理文件中的所有语句,基本上是启动时函数中没有的任何语句。 在您的情况下,
var config_manager=require('configuration-manager');
console.log(config_manager.loadConfig());//返回空对象{}
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
 });

如果这不起作用,问题就不会出现在执行顺序上。

配置加载到单独的文件中(app.js除外)。我正在将配置文件设置为在app.listenConfiguration中加载。配置文件在单独的文件中加载(app.js除外)。我正在设置要在app.listen中加载的配置文件