我正在使用以下代码来解析json数据并将其保存在我的模块内部,例如当服务器(如npm server.js)时,我使用解析它的函数parse
json文件。
最后,这些解析过的jsons保存在对象configObj
中,我想在用户请求期间(通过express)在路由器模块或其他模块中获取此对象。
我如何实现这一目标?
var configObj;
parse = function () {
return fs.readFileAsync(file, 'utf8')
.then(function (res) {
return JSON.parse(res)
}).then(function (jsonObj) {
configObj = jsonObj;
return jsonObj;
})
....
})
};
module.exports = {
parse: parse,
configObj: configObj
}
parse
函数只调用一次,我想在不同的模块中多次访问configObj
。
答案 0 :(得分:6)
您可以使用类似node-persist
的内容:
var storage = require('node-persist');
storage.setItem('config', configObj);
console.log(storage.getItem('config'));
答案 1 :(得分:3)
如果您使用快速最佳方式是app.set
:当您需要parse
模块功能时保存结果,例如:
app.set("parse.configObj",configObj)
并在需要时获取:
app.get("parse.configObj")
或者您可以在require:
之后使用require.cache
范围
<强> server.js:强>
var parse = function () {
return fs.readFileAsync(file, 'utf8')
.then(function (res) {
return JSON.parse(res)
}).then(function (jsonObj) {
if (typeof require.cache.persist === "undefined") {
require.cache.persist = {};
}
require.cache.persist.configObj = jsonObj;
return jsonObj;
})
})
};
module.exports = { parse: parse }
<强> app.s 强>
var parse = require('./server.js').parse();
<强>路由/ index.js 强>
console.log( require.cache.persist.configObj );