【问题标题】:multiple usage of require() in Node.js return undefined results在 Node.js 中多次使用 require() 返回未定义的结果
【发布时间】:2011-11-30 15:46:57
【问题描述】:

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

提前致谢。

更新

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

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

【问题讨论】:

    标签: node.js require


    【解决方案1】:

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

    解决你的周期。

    【讨论】:

    • 如果你不能离开循环,至少在 process.nextTick() 中移动实际代码(如init),或者更好的是,在一个地方调用初始化手动。不需要您的“通用”模型:只需要您明确需要的模块。它们被缓存,因此不会造成性能损失。
    • 我相信你是对的。明天我会检查并告诉你们结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    相关资源
    最近更新 更多