在节点模块上共享变量



i有一个主模块(app.js(,该模块初始化了客户端(用于进行REST API调用(,并且在使用此客户端的该主模块中具有功能。随着我的代码越来越大,我想通过将功能放入模块(例如module_a.js(来模块化。在各个模块中初始化和共享该客户的最佳实践是什么?我想到的一种方法是创建一个我在每个模块中需要的客户端模块 - 那时客户端不会多次初始化?基督徒

no。据我所知,一个模块是单身人士,因此只能创建一次。当另一个模块require s模块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);

在日志线上的测试中,"一次"只应调用一次,无论您的服务器运行多长时间。

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

感谢您的回答。在研究了一点之后,我认为解决方案是使用在主机中创建的剩余客户端初始化每个模块(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){
          ...
    

    }(;}

相关内容

  • 没有找到相关文章

最新更新