2017-08-30 81 views
0

我正在使用多个模块开展NodeJS中的家庭自动化项目。这些模块需要访问中心DeviceManager内的数据设备。通常我会为此创建一个单例,以便所有模块都可以访问DeviceManager的相同状态。在NodeJS中的模块之间共享数据

要创建一个单独使用:

class DevicesManagerInstance { 

    constructor() { 

     this.devices = {}; 

    } 

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

} 

let DevicesManagerInstance = new DevicesManager(); 

module.exports = DevicesManagerInstance; 

我发现一些老问题,关于单身,并回答共享数据,但仍不满足,如果它是共享数据删除方式的NodeJS的问题:

但也读单身人士是一种反模式。有人可以澄清什么是在模块之间共享数据的“NodeJS”方式(在我的情况下是设备)。在Angular中,我将为此创建一项服务。

+0

DevicesManager是否与其他一切相同? – sparrow

+0

是的,事情是,我有很多模块都需要访问相同的设备数据。 –

+1

那么你有什么是完全好的!祝你好运:) – sparrow

回答

1

为什么修理什么不坏?如果你的方法有效,它就会起作用。

这就是说,我没有看到任何理由创建一个类,如果我只打算创建一个实例。我会选择不同的方法:

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; 
+0

构造函数部分如何。我的例子在实际课程中被简化了,很多操作和初始化正在进行。你只是创建例如一个初始化函数? –

+1

为什么只有当你初始化某个东西的时候才会创建一个初始化函数?就我个人而言,当我定义DeviceManager时,我会初始化所有内容。 – EKW

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 
+0

构造函数部分如何。我的例子在实际课程中被简化了,很多操作和初始化正在进行。你只是创建例如一个初始化函数? –

+1

我已更新脚本@BasvanDijk您现在可以访问该实例,并且只有一个** DeviceManager **实例。 –