我在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中常见,它有效:
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未定义。有人知道为什么吗?
提前致谢。
更新
谢谢大家,以下解决方案有效:
不需要您的“通用”模型:只需要您需要的模块 明确地
答案 0 :(得分:10)
你有一个周期:server
- > common
- > server
。
当循环中再次需要加载模块时,Node.js require()
返回undefined
(按设计)。
解决你的周期。