【问题标题】:How do I access my object array as a datastore across multiple node modules in 'use strict' mode?如何在“使用严格”模式下跨多个节点模块访问我的对象数组作为数据存储?
【发布时间】:2015-04-14 04:32:04
【问题描述】:

所以我使用对象数组作为我的数据存储。每个模块都处于“使用严格”模式,因此全局变量不起作用。我尝试创建一个模块来存储我的数据并将其包含在多个模块中,但是它无法正常工作。

list.js

'use strict';

module.exports.list = [];

我将让其他文件访问它,例如,主代码,然后是一个测试文件。我需要能够从包含的每个文件列表中访问和操作数组。我得到的只是模块崩溃。

code.js

var list = require('./list.js').list;
    list = [{id:1},{id:2},{id:3}];

尝试运行规范,但一切都崩溃了,删除数据存储会导致测试失败。

code_spec.js --tests

var list = require('./list.js').list;
    fixtures = [{id:1},{id:2},{id:3}];
list = fixtures;

【问题讨论】:

  • 我不明白为什么这两行代码会导致引擎崩溃。反正list = [{id:1},{id:2},{id:3}];只会改变局部变量list,不会影响其他模块的list

标签: javascript arrays node.js module scope


【解决方案1】:

您实际上并没有更新列表的单例实例。您想为此使用 setter 和 getter。您可以为此使用closures 的概念来访问list.js 中的局部变量。

//list.js

var list = [];

module.exports.get = function () {
    return list;
}

module.exports.set = function (ll) {
    if (Array.isArray(ll)) {
        list = ll
    }
}

以及如何在您的其他文件中使用它:

//other.js

var listService = require('./list');

list = listService.get();

newList = listService.set([{id:1}, {id:2}, {id:3}]);

console.log(listService.get()); //[{id:1}, {id:2}, {id:3}]

我只会用于某些事情的另一种可能性是使用global 对象:

global.list = [{id:1}, {id:2}, {id:3}];

这可以在整个应用程序中使用。但不要污染您的全球空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多