其他模块中的节点事件发射器

我有3个不同的JavaScript文件,最小的一个发出一个事件,同时第二个(较大的)文件拾取事件,并进一步发送到主文件。 这是我迄今为止所尝试的:

//mini.js var EventEmitter = require('events').EventEmitter; var ee = new EventEmitter; console.log("Emitting event"); var message = "Hello world"; ee.emit('testing',message); //second.js var mini = require('./mini.js'); var EventEmitter = require('events').EventEmitter; var ee = new EventEmitter; mini.on('testing',function(message){ console.log("Second file received a message:",message); console.log("Passing further"); ee.emit('testing',message); }); //main.js var sec = require('./second.js'); sec.on('testing',function(message){ console.log("Main file received the message",message); }); 

但是,我明白了

 mini.on('testing',function(message){ ^ TypeError: undefined is not a function 

与节点执行文件时出错。

我在这里做错了什么? 谢谢

这一个应该工作:

这是放在first.js里面的内容:

 //first.js var util = require('util'), EventEmitter = require('events'); function First () { EventEmitter.call(this) } util.inherits(First, EventEmitter); First.prototype.sendMessage = function (msg) { this.emit('message', {msg:msg}); }; module.exports = First; 

这是放在second.js里面的内容:

 //second.js var First = require('./first.js'); var firstEvents = new First(); // listen for the 'message event from first.js' firstEvents.on('message',function(data){ console.log('recieved data from first.js is : ',data); }); // to emit message from inside first.js firstEvents.sendMessage('first message from first.js'); 

现在运行 node second.js ,你应该为你启动“消息”事件。

您可以使用此模式来实现模块之间的任何级别的消息传递。

希望这可以帮助。

您不会在mini.js中导出EventEmitter实例 将此添加到mini.js中:

 module.exports = ee; 

如果要导出EventEmitter实例以使其可用于main.js,则还需要在second.js中添加类似的行。

另外一个问题是,在second.js添加testing事件处理程序之前,您正在mini.js中进行testing ,所以最终会丢失该事件。