目前我只是传递我的fileNamePrefix
:
let shortid = require('shortid');
let fileNamePrefix = shortid.generate();
module1.run(fileNamePrefix); //generating a file based on `fileNamePrefix` `xxxxx.f1.json`
module2.run(fileNamePrefix); //generating a file based on `fileNamePrefix` `xxxxx.f2.json`
module3.run(fileNamePrefix); //generating a file based on `fileNamePrefix` `xxxxx.f3.js
我认为不太正确,我可能需要稍后将更多内容传递给我的模块,所以我想避免将其作为函数params
传递。
在nodejs中处理此问题的最佳方法是什么?
global
这样的global.fileNamePrefix = shortid.generate();
对象会在那种情况下发生,还是会接近那种不同的对象?我刚看到global
不好......
答案 0 :(得分:1)
只需创建类似的模块:
// unicname.js
let shortid = require('shortid');
let fileName = shortid.generate();
module.exports = {fname: fileName};
//module1.js
const {fname} = require('./unicname.js');
....
由于node.js缓存模块,因此只会计算一次值,因此您可以在所有模块中获得相同的值。
答案 1 :(得分:1)
您可以使用@СергейТертичный建议的单身方法或方法
Singleton:
//shortid.js
var fileSingleTon = module.exports = {
fileNamePrefix: null,
getFileNamePrefix: function() {
return fileSingleTon.fileNamePrefix || fileSingleTon.generate()
},
generate: function() {
console.log('generating..');
return fileSingleTon.fileNamePrefix = 'your_file_prefix';
}
}
//module1.js
var fileNamePrefix = require('./shortid').getFileNamePrefix();
//do stuff for module1
//module2/js
var fileNamePrefix = require('./shortid').getFileNamePrefix();
//do stuff for module1
依旧......
即使现在你正在调用require('./ shortid')。getFileNamePrefix();多次,生成函数只被调用一次。
考虑你有shortid.js如下:
// A: block of code to do some manipulations
// B : module.exports = manipulation result.
所以基本上在节点js中“模块”核心模块负责给我们module.export功能执行上面的任何内容导出(在abode示例中的部分A)只是第一次并且即使你需要也会缓存它在多个其他文件中。但是,它只执行导出内的每个需求中的函数或代码块。所以你可以使用这种方法,你的A块将有登录生成fileNamePrefix,然后B只返回它。