其他模块中的节点事件发射器
我有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
,所以最终会丢失该事件。