在Node.js中多次使用require()会返回未定义的结果

时间:2011-11-30 15:46:58

标签: 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中常见,它有效:

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未定义。有人知道为什么吗?

提前致谢。

更新

谢谢大家,以下解决方案有效:

  

不需要您的“通用”模型:只需要您需要的模块   明确地

1 个答案:

答案 0 :(得分:10)

你有一个周期:server - > common - > server。 当循环中再次需要加载模块时,Node.js require()返回undefined(按设计)。

解决你的周期。