在Node.js中多次使用require()会返回未定义的结果
node.js中require()的行为非常奇怪 我有一个简单的common.js:在Node.js中多次使用require()会返回未定义的结果,node.js,require,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').dbM
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
};
my 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中使用common,它可以工作:
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();
错误在于,在第二种情况下,某些属性common.config和common.dbManager未定义。有人知道为什么吗
提前谢谢
更新
感谢各位,以下解决方案有效:
您不需要“通用”模型:只需要您需要的模块
明确地
您有一个循环:
server
->common
->server
。
Node.jsrequire()
在循环中再次需要加载的模块时,返回未定义的
(按设计)
解决你的周期。如果没有周期你就活不下去,那么至少在process.nextTick()中移动实际代码(如
init
),或者更好,在一个地方手动调用初始化。不需要您的“通用”模型:只需要明确需要的模块。它们是缓存的,所以没有性能损失。我相信你是对的。我明天查一下,告诉你们结果。