2015-06-08 54 views
0

server.js後,我無法添加對象module.exports

module.exports.a = 'abc'; 
var app = expressAppConstructor(db); 
module.exports.b = 'xyz'; 
console.log(JSON.stringify(module.exports)); // --> {"a":"abc","b":"xyz"} 

exportsLog.js

var io = require('./server'); 
console.log(JSON.stringify(io)); // --> {"a":"abc"} Note b: xyz is missing 

我怎樣才能快遞之後添加bmodule.exports應用程序已初始化?

我在mean.js堆棧和上面提到的文件是server.jsexpressConstructorFunctionrequire(./config/express.js)

server.js原始內容,config/express.js

+0

您是否收到錯誤?如果第二個調用被忽略,我會懷疑'expressAppContstructor'必須拋出一個錯誤。應用程序初始化後是否運行'console.log'? – Chev

+0

我沒有收到任何錯誤。 –

+0

當使用'exports'而不是'module.exports'時,沒有什麼變化 –

回答

1

與您的實際應用調試後我發現原因第二個設置不起作用。它可以工作,但是當你初始化你的快速應用程序時,你需要在你的一個路由中使用服務器文件。

node server.js - >exports.a = 'abc'; - >expressAppConstructor - >

config.getGlobbedFiles('./app/routes/**/*.js').forEach(function(routePath) { 
    require(path.resolve(routePath))(app); 
}); 

- >在經由上述加載一個路由文件中,此運行:require('server.js'); - >現在終於堆棧返回到服務器文件並執行:exports.b='xyz'; ,但該模塊已被您的路由文件需要並緩存。

我實際上會擔心你每次需要文件時反覆啓動服務器。雖然我認爲它不會中斷,因爲節點緩存了需要的模塊,因此邏輯沒有運行,但緩存服務器模塊上的exports僅具有第一個分配,因爲在第二個分配到exports之前,您的路由文件需要它發生。在路由文件嘗試加載服務器文件時,它只運行到應用程序初始化行。在你的路由文件中加入exports後,任何東西顯然都不會導入到導出的數據中。