Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Node.js中多次使用require()会返回未定义的结果_Node.js_Require - Fatal编程技术网

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

在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

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
};
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.js
require()
在循环中再次需要加载的模块时,返回
未定义的
(按设计)


解决你的周期。

如果没有周期你就活不下去,那么至少在process.nextTick()中移动实际代码(如
init
),或者更好,在一个地方手动调用初始化。不需要您的“通用”模型:只需要明确需要的模块。它们是缓存的,所以没有性能损失。我相信你是对的。我明天查一下,告诉你们结果。