在不同模块中捕获事件

Catch event in different module

我在我的节点应用程序中的某个模块中创建了事件,我想在其他模块中捕获此事件,我尝试了以下不起作用

引发事件的模块

EventEmitter = require("events").EventEmitter;

function updatePort(port) {
  ...
  var ee = new EventEmitter();
  ee.emit("AppDef");

}

现在我想在不同的模块中捕捉这个事件并向控制台打印一些东西

EventEmitter = require("events").EventEmitter;
var ee = new EventEmitter();
ee.on("AppDef", function () {
  console.log('Port is defiend ' + port);
})

我认为问题出在我做了两次的 new 但不确定如何克服这个问题...

问题是,您正在创建两个不同的 EventEmitter 实例,并且您从一个实例发出并在另一个实例中侦听事件。

要解决此问题,您需要在模块之间共享相同的 EventEmitter 实例

模块 1

var EventEmitter = require("events").EventEmitter;
var ee = new EventEmitter();

function updatePort(port) {
  ...
  // emit the port as well
  ee.emit("AppDef", port);
}

// export the EventEmitter instance
module.exports.ee = ee;

模块 2

var mod1 = require('./module1');

// Attach the listener on the EventEmitter instance exported by module1
mod1.ee.on('AppDef', function(port) {
    console.log('Port is defined ' + port);
});