2017-05-30 115 views
0

我是NodeJS的初學者,所以我不完全確定實現這個目標的最佳方法是什麼。基本上我想用一個字符串創建一個全局變量,例如'USD',只要我的'set currency'事件被觸發,它就會被更新。我希望它保持這種方式,直到事件再次被調用。用NodeJS更新全局變量

我使用EventEmitter來觸發一些事件,在我的一個文件中,我有以下幾點。

var event = require('./events'); 

    if (msg.content.includes('!currency set currency')) { 
    split = msg.content.split(' '); 
    event.emit('setCurrency', split[3]) 
    } 

然後在事件文件中,我正在做類似下面的事情。

var exchangePref; 

var event = new events.EventEmitter(); 


event.on('setExchange', (exchange) => { 
    exchangePref = exchange; 
    return exchangePref; 
}); 

modules.exports = event; 

據我所知,重新寫變量內的回調是不會做什麼,我需要做的,但我十分贊同如何實現什麼,我需要做的,由於失去了modules.exports = event部分在底部,調用函數根本不會獲取數據。我玩過創建構造函數,但即使如此,我仍然無法實現它。

任何建議/想法將不勝感激。

回答

3

我不會使用事件發射器。然後在你的其他各種模塊,您只需

var exchangePrefs = { currency: "JPY" }; 
module.exports = { 
    setCurrency : function(newVal){ exchangePrefs.currency = newVal; }, 
    getCurrency : function(){ return exchangePrefs.currency; } 
}; 

require('./mymodule').setCurrency('USD'); 

和其他地方

var currency = require('./mymodule').getCurrency(); 

我敢肯定,它可以製成而不是創造的線沿線的一個模塊更漂亮,但我認爲你明白了。幾乎所有的意圖和目的模塊都像單身人士一樣工作。有一些陷阱,但沒有你會經常碰到的東西。 (Singleton pattern in nodejs - is it needed?

就我個人而言,我會在exchangePref模塊中使用某種數據持久性,以便讓您安心。像redis一樣,或保存到json文件。

+0

這看起來會讓我走上正確的道路,非常感謝! –