访问多个 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)?

单个node.js项目中的Mongoose和多个数据库

单个node.js项目中的Mongoose和多个数据库

在 Node.js 中的单个 HTTP 请求中调用多个 HTTP 请求

使用 postgres 和 node js 在单个语句中执行多个查询

Node.js - 将多个对象传递给同一个 EJS 文件