在不同模块中捕获事件
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);
});
我在我的节点应用程序中的某个模块中创建了事件,我想在其他模块中捕获此事件,我尝试了以下不起作用
引发事件的模块
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);
});