Node.js将variables传递给模块vs将variables传递给每个模块函数
我在学习node.js,感兴趣的是下面两种情况有什么区别。 IE我有一些variablesmyvar
(如db连接或只是常量string“testing”),需要在许多模块和子模块中传递。
第一种情况。 创build模块,接受该variables作为参数:
submodule.js:
var option , submodule = {}; submodule.func = function(){ ... var something = option; ... } module.exports = function(opts){ option = opts; return submodule; }
module1.js:
var option , submodule , module1 = {}; module1.func = function(){ ... submodule.func(); ... var something = option; ... } module.exports = function(opts){ option = opts; submodule = require('./submodule')(opts); return module1; }
在这种情况下,如果在具有相同myvar
值的多个模块(即2个模块)中使用子模块,子模块的module.exports
函数将被调用2次。 在node.js中,它表示“模块在第一次加载后被caching”。 而我不明白的是这个模块caching或不。
另一种情况: myvar
可以作为parameter passing给模块函数。 所以代码将如下所示:
submodule.js:
function func(option){ ... var something = option; ... }; exports.func = func;
module1.js:
var submodule = require('./submodule'); function func(option){ ... submodule.func(option); ... var something = option; ... }; exports.func = func;
所以问题是:这两个案件有没有区别,还是一样?
我不确定你在这里问什么,但是如果你需要传递值到你的模块,你应该确保导出接受参数的函数。 当他们说一个模块被caching时,这意味着你的模块只被初始化一次。 把你的模块想象成一个对象:
var a = 1; var b = 2; console.log("init!"); module.exports.test = function(){ console.log("this is a function!"); }
这里,a,b和第一个日志将只运行一次。 这是当模块被请求,然后被caching。 当你做一个
var example = require("module")
如果它从未被创build,它将初始化a,b,并执行日志消息。 如果它已经创build,它只会给你一个你输出的参考。 每次你打电话:
example.test()
它会输出: this is a function!
但是你不会得到a,b和第一个日志再次运行。
把所有的语句都看作是那个对象的私有静态variables。
这是另一个完全可行的例子:
app.js
var s = require("./sample"); var y = require("./sample"); s.test(); y.test(); s.test(); console.log("finished");
sample.js
var a = 1; var b = 2; console.log("init!"); function test() { console.log("here! " + a); a++; } exports.test = test;
这一切输出:
init! here! 1 here! 2 here! 3 finished
这有帮助吗?