3
我在node.js中有非常奇怪的require()行爲。Node.js中require()的多次使用返回未定義的結果
我有簡單的common.js:
module.exports = common = {
config: require('./config/config'),
errorCodes: require('./config/errorCodes'),
server: require('./server/server').server,
dbManager: require('./db/dbManager').dbManager,
idGenerator: require('./utils/idGenerator').idGenerator
};
我server.js:
var http = require('http'),
url = require("url"),
common = require('../common');
var server = (function()
{
var server = http.createServer(function (request, response)
{
});
// running server
function startServer()
{
server.listen(common.config.port);
console.log('Tracking server running at :' + common.config.port);
}
return {
startServer: startServer
};
})();
module.exports.server = server;
所以,案例1, - 我只在server.js reqiuring普遍,它的工作原理:
start.js:
//var common = require('./common');
var server = require('./server/server').server;
// initialize whole server
var init = function()
{
// common.dbManager.init();
server.startServer();
};
init();
而且,第2種情況,我需要在這兩個模塊共同的 - 不工作:
start.js
var common = require('./common');
var server = require('./server/server').server;
// initialize whole server
var init = function()
{
common.dbManager.init();
server.startServer();
};
init();
的錯誤是,在第二種情況下一定性的判定常見。 config和common.dbManager未定義。有人知道爲什麼嗎?
在此先感謝。
更新
謝謝你們,下面的解決方案工作:不需要
你的 '普通' 的模式:只需要的模塊,你需要 明確
如果你不能沒有這個循環,至少要移動process.nextTick()中的實際代碼(比如'init'),或者甚至更好,你可以在一個地方手動調用初始化。你的'普通'模型是不需要的:只需要明確需要的模塊。他們被緩存,所以沒有性能損失。 – 2011-11-30 15:54:16
我相信你是對的。我會明天檢查一下,讓你們知道結果。 –