访问多个 node.js 文件的单个 JavaScript 对象?
Posted
技术标签:
【中文标题】访问多个 node.js 文件的单个 JavaScript 对象?【英文标题】:Access Single JavaScript Object for multiple node.js files? 【发布时间】:2015-03-11 01:57:48 【问题描述】:我一直在尝试在多个文件中使用单个 javascript 对象。为此,我选择了 JavaScript 中的单例设计模式。
mySingleton.js
var mySingleton = (function ()
var instance;
function init()
function privateMethod()
console.log( "I am private" );
var privateVariable = "Im also private";
var privateRandomNumber = Math.random();
return
publicProperty: "I am also public",
publicMethod: function ()
console.log( "The public can see me!" );
,
getRandomNumber: function()
return privateRandomNumber;
;
;
return
getInstance: function ()
if ( !instance )
instance = init();
console.log("Newly creating an object");
return instance;
;
)();
module.exports = mySingleton;
我正在一个单独的节点 js 文件中访问上述对象。如下代码所示
test.js
var singleton = require('./mySingleton');
var obj = singleton.getInstance();
console.log(obj.publicProperty);
console.log('random number value:'+obj.getRandomNumber());
test2.js
var singleton = require('./mySingleton');
var obj = singleton.getInstance();
console.log(obj.publicProperty);
console.log('random number value:'+obj.getRandomNumber());
当我每次创建一个新的 javascript 对象时执行上述两个文件。但我想在多个文件中使用同一个 JavaScript 对象。
提前谢谢....
所以任何人都可以提出任何建议来实现上述功能。
【问题讨论】:
您应该删除java
标签。 Java 是一种与 Javascript 无关的编程语言 :)
您是否使用任何框架,例如 Express 4.0?
你是在一个一个独立的执行test.js和test2.js吗?
你在做node test.js
然后运行node test2.js
吗?
不@Datsik我没有使用像express这样的任何框架,我只是在普通的节点js文件中使用。是的,我正在这样做“节点 test.js 然后运行节点 test2.js”。
【参考方案1】:
问题是您正在独立运行 test.js 和 test2.js。
当您执行 test.js 时,它会创建一个全局上下文,其中 obj
绑定到 test.js 的全局范围。
执行完成后,该上下文被销毁并为 test2.js 创建一个新上下文。因此,getInstance
函数中的 instance
变量找不到实例并创建一个新实例。
要正确使用单一模式,您需要使用相同的 singleton
变量来获取实例。
因此,一旦您使用
创建了singleton
var singleton = require('./mySingleton');
您只需要使用此变量获取所有实例。由于单例属性是由于匿名函数的执行关闭而产生的,该函数将对象返回到mySingleton
【讨论】:
【参考方案2】:您单独调用它们是行不通的,每次调用 node test.js 时,您都在创建一个新的运行时变量:
如果你将它们包含在一个主包中并运行它,你会发现它工作得很好:
【讨论】:
以上是关于访问多个 node.js 文件的单个 JavaScript 对象?的主要内容,如果未能解决你的问题,请参考以下文章
在 Node.js 中的单个 HTTP 请求中调用多个 HTTP 请求