目前,我只是这样传递我的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
不好... 最佳答案
您可以使用单例方法或@СергейТертичный建议的方法
单身人士:
//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();多次,generate函数仅被调用一次。
节点缓存方法:
考虑您具有shortid.js,如下所示:
// A: block of code to do some manipulations
// B : module.exports = manipulation result.
因此,基本上在节点js的“模块”核心模块中,它负责为我们提供module.export功能仅首次执行export(在上面的示例中为A部分)以上的内容,即使您多次要求也将其缓存其他文件。但是,它仅在导出内部的每个需求中执行功能或代码块。因此,您可以使用这种方法,其中您的A块将登录以生成fileNamePrefix,然后B仅仅返回它。