在NodeJS

时间:2017-08-30 19:44:45

标签: node.js node-modules

我正在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中,我会为此目的创建一个服务。

2 个答案:

答案 0 :(得分:2)

为什么修复未破坏的东西?如果您的方法有效,那就有效。

话虽如此,如果我只想创建一个实例,我认为没有任何理由创建一个类。我会选择不同的方法:

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;

答案 1 :(得分:1)

这是一个单独的实例,但是如果你需要类,你也可以轻松地将以下内容转换为类结构,

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