使用NodeJS更新全局变量

时间:2017-05-30 01:16:18

标签: javascript node.js

我是NodeJS的初学者,所以我不完全确定实现这一目标的最佳方法是什么。基本上我想创建一个带有字符串的全局变量,例如' USD',只要我设置了货币,就会更新。事件被解雇了。我希望它保持这种状态,直到再次调用该事件。

我正在使用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部分位于底部,调用函数根本不会获取数据。我曾经创造过一个构造函数,但即便如此,我也无法让它工作。

非常感谢任何建议/想法。

1 个答案:

答案 0 :(得分: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文件。