在Node.js中,我是在"需要"时创建一个新对象吗?

mur*_*lai 24 require mongoose node.js

所以,我不确定的是.如果在ModuleA中,我有:

var mongoose = require('mongoose');
mongoose.connect(pathA);
Run Code Online (Sandbox Code Playgroud)

ModuleB中,我有:

var mongoose = require('mongoose');
mongoose.connect(pathB);
Run Code Online (Sandbox Code Playgroud)

在主程序中,我有:

var mA = require('./moduleA.js'), 
mB = require('./moduleB.js');
Run Code Online (Sandbox Code Playgroud)

所以,当我运行主程序时,我想我会创建两个猫鼬"实例"; 一个连接到pathA,一个连接到pathB,是吗?

另外,在模块B中,在连接到pathB之前,它是否连接到pathA或什么都没有?

谢谢.

mur*_*lai 16

我刚用最新的节点V0.4.6进行了几次测试.我确认了以下内容:

  1. 从"require"返回的变量是单例.
  2. 后续更改将在包含它的所有其他模块中更改所需模块的数据.
  3. 猫鼬的联系有点奇怪.即使断开连接并将其设置为新的连接路径,它仍然使用旧的连接路径.

所以,我的意思是上述第1点和第2点是:

如果你有模块大师:

var myStr = 'ABC';
module.exports.appendStr = function(data) {
    myStr += ' ' + data;    
};
module.exports.output = function() {
    console.log("Output: " + myStr);
};
Run Code Online (Sandbox Code Playgroud)

如果你有另外两个模块:

模块A.

var mc = require('./moduleMaster.js');
var ma = function() {mc.appendStr(' MA '); };
ma.prototype.output = function() {
  mc.output();
}
module.exports.create = function() {
    return new ma();
};

module.exports._class = ma;
Run Code Online (Sandbox Code Playgroud)

模块B.

var mc = require('./moduleMaster.js');
var mb = function() {mc.appendStr(' MB '); };
ma.prototype.output = function() {
  mc.output();
}
module.exports.create = function() {
    return new mb();
};

module.exports._class = mb;
Run Code Online (Sandbox Code Playgroud)

现在,当您运行需要模块A和模块B的测试脚本时,实例化它们并输出:

mTestA.output();
mTestB.output();
Run Code Online (Sandbox Code Playgroud)

您将获得以下输出:

ABC MA
ABC MA MB
Run Code Online (Sandbox Code Playgroud)

代替

ABC MA
ABC MB
Run Code Online (Sandbox Code Playgroud)

因此,它是一个单身人士.不仅仅是本地模块.