在不同模块

时间:2015-08-12 08:29:06

标签: javascript node.js eventemitter

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

举起活动的模块

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我做了两次但不确定如何克服这个问题......

1 个答案:

答案 0 :(得分:1)

问题是,您正在创建两个不同的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);
});