2017-07-04 44 views
1

我有一個名爲的變量number_of_clusters必須定期更新。 number_of_clusters也必須與其他模塊共享讀取它。我如何確保讀取模塊在每次訪問該變量時都會讀取這個變量的新副本? 我不想使用數據庫來共享這個變量,所以我想我可以通過process.envnode.js在模塊之間共享動態變量

process.env.number_of_clusters = 1; 

它是一個很好的做法分享?

+0

你測試了這一點?全局變量不會神奇地落後於流程,它們將始終保持最新,除非您異步更新它。 –

+0

@SterlingArcher不,我沒有測試過。我真的很想知道使用全局變量和異步更新它們的不利之處 – Salar

回答

-1

您可以使用socket.io將變量存儲在服務器上,並將其發送到所有頁面。

+0

您能否提供示例代碼或有用的鏈接。 – Salar

+0

對不起!以下是快速聊天應用入門指南:https://socket.io/get-started/chat/ – aprouja1

0

好像你尋找一個全局變量:

global. number_of_clusters = 1 

但是使用一個數據庫或文件可能會是一個更好的解決方案。

+0

使用全局變量而不是在process.env上定義全局變量的好處是什麼? – Salar

+0

很好的問題。我會說你不能與環境變量產生名稱衝突。 –

0

嘗試讀取/寫入文件?

var fs = require('fs'); 
fs.writeFile("/path/to/file", "whatever", function(err) { 
    console.log("The file was saved!"); 
}); 
fs.readFile('/path/to/file', 'utf8', function(err, contents) { 
    console.log(contents); // -> whatever 
}); 
0

如果其他模塊運行的同一過程的NodeJS, 你可以導出getter到其他模塊,這些模塊將獲得的number_of_clusters他們的新鮮值的一部分。 像:

function get_number_of_clusters() { 
    return number_of_clusters; 
} 

module.exports = { get_number_of_clusters }; 

現在,在其他模塊,你需要導入這個模塊並調用此方法,如:

var getter = require('path/to/above/module').get_number_of_clusters; 
var number_of_clusters = getter();