2016-06-07 25 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中加載 –