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){ ...
}(;}