将对象保存在模块中并从不同模块访问它

时间:2015-08-03 10:29:49

标签: javascript node.js express module

我正在使用以下代码来解析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

2 个答案:

答案 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 );