在NodeJS中的模块之间共享数据
我正在使用多个模块开展NodeJS中的家庭自动化项目。这些模块需要访问中心DeviceManager
内的数据设备。通常我会为此创建一个单例,以便所有模块都可以访问DeviceManager
的相同状态。在NodeJS中的模块之间共享数据
要创建一个单独使用:
class DevicesManagerInstance {
constructor() {
this.devices = {};
}
addDevice(id, device) {
this.devices.id = device;
}
}
let DevicesManagerInstance = new DevicesManager();
module.exports = DevicesManagerInstance;
我发现一些老问题,关于单身,并回答共享数据,但仍不满足,如果它是共享数据删除方式的NodeJS的问题:
- https://derickbailey.com/2016/03/09/creating-a-true-singleton-in-node-js-with-es6-symbols/
- Singleton pattern in nodejs - is it needed?
- NodeJS: Sharing Application State Between Modules
但也读单身人士是一种反模式。有人可以澄清什么是在模块之间共享数据的“NodeJS”方式(在我的情况下是设备)。在Angular中,我将为此创建一项服务。
为什么修理什么不坏?如果你的方法有效,它就会起作用。
这就是说,我没有看到任何理由创建一个类,如果我只打算创建一个实例。我会选择不同的方法:
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;
构造函数部分如何。我的例子在实际课程中被简化了,很多操作和初始化正在进行。你只是创建例如一个初始化函数? –
为什么只有当你初始化某个东西的时候才会创建一个初始化函数?就我个人而言,当我定义DeviceManager时,我会初始化所有内容。 – EKW
这是一个实例,但如果你需要你的类也可以转换成以下类的结构很容易,
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
构造函数部分如何。我的例子在实际课程中被简化了,很多操作和初始化正在进行。你只是创建例如一个初始化函数? –
我已更新脚本@BasvanDijk您现在可以访问该实例,并且只有一个** DeviceManager **实例。 –
DevicesManager是否与其他一切相同? – sparrow
是的,事情是,我有很多模块都需要访问相同的设备数据。 –
那么你有什么是完全好的!祝你好运:) – sparrow