Javascript 捕获不同模块中的事件

Javascript 捕获不同模块中的事件,javascript,node.js,eventemitter,Javascript,Node.js,Eventemitter,我在我的节点应用程序中的某个模块中创建了事件,我想在其他模块中捕获此事件,我尝试了以下不起作用的方法 引发事件的模块 EventEmitter = require("events").EventEmitter; function updatePort(port) { ... var ee = new EventEmitter(); ee.emit("AppDef"); } 现在我想在不同的模块中捕获此事件并将内容打印到控制台 EventEmitter = require("ev

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

引发事件的模块

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);
});

您需要在模块之间共享同一个事件发射器实例。@thefourtheye-您能告诉我如何作为答案吗?谢谢我尝试了,这是唯一的方法吗?问题是,我在模块之间创建了依赖关系…我知道我已经创建了依赖关系,但还有其他方法可以做到这一点?您可以尝试重构代码,使您可以在生成该模块的同一模块中侦听事件。感谢1+,最后一个问题:)你说的是重构代码…现在我需要更新一些端口,所以我在特定模块中进行更新,我想将此事件发送到server.js,因为我想打印到控制台上我找到的新端口…可以吗?是的,对我来说它看起来很好。