javascript - 使用 NodeJS 更新全局变量

标签 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 部分,我对如何实现我需要它执行的操作感到非常迷失,调用函数根本无法获取数据。我尝试过创建一个构造函数,但仍然无法让它工作。

任何建议/想法将不胜感激。

最佳答案

我不会为此使用事件发射器。相反,按照以下方式创建一个模块:

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文件。

关于javascript - 使用 NodeJS 更新全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44252060/

相关文章:

javascript - 如何获取两个属性的值并将其放入另一个属性?

node.js - RxJS 结果与 switchMap 和 mergeMap

node.js - DynamoDb如何查询一个Global Secondary Index?

javascript - 无法加载 "props"数据

node.js - 无法在 shell 脚本中运行 npm

javascript - Azure 函数服务总线输出消息属性

javascript - 删除 Chrome 加载通知?

JavaScript 带有reduce 函数的求和和百分比

javascript - 使用堆栈跟踪记录 “Warning” 而不是 “Error”

Javascript - 调用回调时终止函数执行的样式