在 NodeJS 中的模块之间共享数据

Share data between modules in NodeJS

我正在使用 NodeJS 开发一个家庭自动化项目,其中包含多个模块。这些模块需要访问中央 DeviceManager 内的数据设备。通常我会为此创建一个单例,以便所有模块访问 DeviceManager.

的相同状态

要创建单例,我使用:

class DevicesManagerInstance {

    constructor() {

        this.devices = {};

    }

    addDevice(id, device) {
        this.devices.id = device;
    }

}

let DevicesManagerInstance = new DevicesManager();

module.exports = DevicesManagerInstance;

我发现了一些关于单例和共享数据的旧问题,但仍然不满意这个问题的答案是否是 de NodeJS 共享数据的方式:

但是单例也是一种反模式。有人可以澄清什么是 "NodeJS" 在模块之间共享数据的方式(在我的例子中是设备)。在 Angular 中,我会为此目的创建一个服务。

为什么要修复未损坏的东西?如果你的方法行得通,那就行得通。

也就是说,如果我只想创建一个实例,我看不出有任何理由创建 class。我会选择不同的方法:

var DeviceManager = {
    devices: {},
    addDevice(id, device) { // this is valid syntax
        DeviceManager.devices[id] = device;
    }
};
module.exports = DeviceManager;

或者,如果您不希望设备在模块外可用:

var devices = {};
var DeviceManager = {
    addDevice(id, device) { // this is valid syntax
        devices[id] = device;
    }
};
module.exports = DeviceManager;

这是单个实例,但如果您需要 class,您也可以轻松地将以下内容转换为 class 结构,

var DeviceManager = function() {
      this.devices: [];  // constructor
};

DeviceManager.prototype.addDevice = function(id, device) {
             DeviceManager.devices[id] = device;          
};
var deviceManager = new DeviceManager();
module.exports = deviceManager;

您可以在其他模块中访问 设备 作为

var DeviceManager = require('./devicemanager');
DeviceManager.devices; // accessing devices