2017-05-30 7 views
0

Ich bin Anfänger zu NodeJS, also bin ich nicht ganz sicher, was die beste Methode, dies zu erreichen wäre. Grundsätzlich möchte ich eine globale Variable mit einem String erstellen, zum Beispiel 'USD', die immer dann aktualisiert wird, wenn mein Event 'set currency' ausgelöst wird. Ich möchte, dass es so bleibt, bis das Ereignis erneut aufgerufen wird.Aktualisieren von globalen Variablen mit NodeJS

Ich verwende EventEmitter, um einige Ereignisse auszulösen, in einer meiner Dateien habe ich Folgendes.

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

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

Und dann in der Ereignisdatei mache ich etwas wie folgt.

var exchangePref; 

var event = new events.EventEmitter(); 


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

modules.exports = event; 

Ich verstehe, dass Umschreiben die Variable in ein Rückruf wird nicht das zu tun, was ich brauche es, zu tun, aber ich bin ganz verlor, wie man das erreichen, was ich brauche es aufgrund der zu tun modules.exports = event Teil an der Unterseite, ruft die aufrufende Funktion einfach nie die Daten ab. Ich habe mit dem Erstellen eines Konstruktors herumgespielt, aber ich konnte es immer noch nicht zum Laufen bringen.

Alle Vorschläge/Ideen würden sehr geschätzt werden.

Antwort

3

Ich würde Event-Emitter dafür nicht verwenden. Stattdessen erstellen Sie ein Modul entlang der Linien von:

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

dann in Ihren verschiedenen anderen Modulen einfach:

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

und woanders

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

Ich bin sicher, dass es gemacht werden kann hübscher, aber ich denke, Sie verstehen es. Für fast alle Zwecke funktionieren Module wie Singletons. Es gibt einige Probleme, aber nichts wird Ihnen zu oft begegnen. (Singleton pattern in nodejs - is it needed?)

Persönlich würde ich eine Art Datenpersistenz im ExchangePref-Modul nur für den Seelenfrieden verwenden. Wie redis oder Speichern in einer JSON-Datei.

+0

Das sieht aus wie es mich auf den richtigen Weg setzen wird, geschätzt! –