跨节点模块共享变量

时间:2017-05-02 09:01:34

标签: node.js module global-variables

我有一个主模块(app.js),用于初始化客户端(用于进行REST api调用),并在该主模块中具有使用此客户端的功能。随着我的代码变得越来越大,我想通过将函数放入模块(比如module_A.js)来模块化我的主程序。在各种模块中初始化和共享此客户端的最佳做法是什么?我想到的一种方法是创建一个客户端模块,我需要在每个模块中 - 客户端不会多次初始化? 基督教

2 个答案:

答案 0 :(得分:1)

没有。据我所知,模块是一个单例,因此它只会被创建一次。当另一个模块require成为模块module_A时,他们会获得对它的现有引用。

module_A.js

console.log("should only be called ONCE");
var module_object = {
    shared_variable: "initial text"
};

module.exports = module_object;

caller1.js

var testmod = require("./module_A");

console.log("TEST IS:" + testmod.shared_variable);
testmod.shared_variable += " - included in caller1";
console.log("TEST IS:" + testmod.shared_variable);

caller2.js

var testmod = require("./module_A");

console.log("TEST IS:" + testmod.shared_variable);
testmod.shared_variable += " - included in caller2";
console.log("TEST IS:" + testmod.shared_variable);

在上面的测试中,使用" ONCE"无论服务器运行多长时间,都应该只调用一次。

如果您有多个实例(例如在具有一个实例pr.cpu的集群中),我不确定它将运行多少次,但您可以测试它是否必要。

答案 1 :(得分:0)

感谢您的回答。经过调查,我认为解决方案是使用在main中创建的其余客户端初始化每个模块(module_A,module_B等)。这将是这样的:

    主app.js中的
  • var apiClient = ... var module_A = require('./ modules / module_A.js') test.init(apiClient);

  • module_A.js中的
  • var client = null;
    
    exports.init = function init(aClient){
      client = aClient;
    }
    
    exports.myFunction = function(callback){
      client.doSomething(function(data){
          ...
    

    }); }