2013-07-27 37 views
0

我在玩node.js導出和require。就拿默認快遞應用:瞭解NodeJS的出口/要求

在的app.js代碼的底部,有一些看起來像這樣:app.get('/', routes.index);這意味着,我可以有更多的指定路線,像這樣:

app.get('/login', routes.login); 
app.get('/logout', routes.logout); 

等爲了更好地理解出口/需求的東西,我試圖把這些放在一個單獨的文件中。我正在嘗試這種方式:

//app.js 
var gets = require('./gets'), 
exports.foo = app; 

//gets.js 
var app = require('./app'); 
console.log(app); //returns empty obj {} 

爲什麼?你能幫我理解我做錯了什麼嗎? 在此先感謝。

回答

1

這就是所謂的circular dependency(節點docs稱之爲「週期」),當兩個模塊都需要彼此。它幾乎總是您可以並應該避免的設計選擇。節點必須首先加載一個模塊,所以第二個由於這種循環依賴邊緣情況而最終得到一個空的對象。解決辦法是不製作gets.jsrequireapp.js,只是有app.jsrequiregets.js

//app.js 
var app = require('express')(); 
var gets = require('./gets'); 
gets.setup(app); 

然後

//gets.js 
function setup (app) { 
    app.get('/blah', myHandler); 
} 
exports.setup = setup;