将对象保存在模块中,并从不同的模块访问它
我正在使用下面的代码来parsingjson数据,并将其保存在我的模块内部,例如,当服务器是(如npm server.js)我使用parsingjson文件的函数parse
。
最后,这些parsing后的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
。
你可以使用像node-persist
这样的东西:
var storage = require('node-persist'); storage.setItem('config', configObj); console.log(storage.getItem('config'));
如果你使用express最好的方法是app.set
:当你需要你的parse
模块的function保存结果,例如:
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 }
应用
var parse = require('./server.js').parse();
路线/ index.js
console.log( require.cache.persist.configObj );