我有一个主模块(app.js),用于初始化客户端(用于进行REST api调用),并在该主模块中具有使用此客户端的功能。随着我的代码变得越来越大,我想通过将函数放入模块(比如module_A.js)来模块化我的主程序。在各种模块中初始化和共享此客户端的最佳做法是什么?我想到的一种方法是创建一个客户端模块,我需要在每个模块中 - 客户端不会多次初始化? 基督教
答案 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等)。这将是这样的:
:
var apiClient = ... var module_A = require('./ modules / module_A.js') test.init(apiClient);
var client = null;
exports.init = function init(aClient){
client = aClient;
}
exports.myFunction = function(callback){
client.doSomething(function(data){
...
}); }