gpt4 book ai didi

node.js - 在 Node.js 中,我是否在 "Require"时创建了一个新对象?

转载 作者:IT老高 更新时间:2023-10-28 22:03:52 26 4
gpt4 key购买 nike

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

var mongoose = require('mongoose');
mongoose.connect(pathA);

ModuleB 中,我有:

var mongoose = require('mongoose');
mongoose.connect(pathB);

在主程序中,我有:

var mA = require('./moduleA.js'), 
mB = require('./moduleB.js');

所以,当我运行主程序时,我想我会创建两个 Mongoose “实例”;一个接pathA,一个接pathB,对吗?

另外,在模块 B 中,在我连接到 pathB 之前,它是连接到 pathA 还是什么都不连接?

谢谢。

最佳答案

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

  1. “require”返回的变量是一个单例。
  2. 后续更改将更改包含它的所有其他模块中所需模块的数据。
  3. Mongoose 的连接有点奇怪。即使您断开连接并将其设置为新的连接路径,它仍会使用旧的连接路径。

那么,我所说的上述第 1 点和第 2 点的意思是:

如果您有模块大师:

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

如果你还有另外两个模块:

模块 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;

模块 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;

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

mTestA.output();
mTestB.output();

你会得到以下输出:

ABC MA
ABC MA MB

而不是

ABC MA
ABC MB

因此,它是一个单例。不仅仅是模块的本地。

关于node.js - 在 Node.js 中,我是否在 "Require"时创建了一个新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5794968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com