2017-08-30 115 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 **實例。 –