你如何在node.js中共享EventEmitter?

我想从一个文件/模块/脚本发出事件,并在另一个文件/模块/脚本中听他们。 如何在不污染全局命名空间的情况下共享它们之间的发射器variables?

谢谢!

您可以传递参数来要求调用:

var myModule = require('myModule')(Events) 

然后在“myModule”

 module.exports = function(Events) { // Set up Event listeners here } 

这就是说,如果你想共享一个事件发射器,创build一个发射器对象,然后传递给你的“文件/模块/脚本”的需求调用。

更新:

虽然是正确的,但是现在将模块紧密地耦合在一起,这是一种代码味道。 相反,可以考虑使用每个模块可能需要的集中式事件总线。

@sququinn是正确的,你应该使用一个共享的单个实例:

eventBus.js:

 const EventEmitter = require('events'); const emitter = new EventEmitter(); emitter.on('uncaughtException', function (err) { console.error(err); }); module.exports = emitter; 

用法:

 var bus = require('../path/to/eventBus'); // Register event listener bus.on('eventName', function () { console.log('triggered!'); }); // Trigger the event somewhere else bus.emit('eventName'); 

为什么不使用全局过程对象的EventEmitter?

 process.on('customEvent', function(data) { ... }); process.emit('customEvent', data); 

专业版:您可以禁用或完全删除模块(例如跟踪器),而无需删除路由中的所有跟踪代码。 我正在为节点跟踪做的 。

康:我现在不是,但是请让我知道,如果你看到在这里抓到;-)