2016-03-28 55 views
1

我有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 

错误。

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

回答

2

这一个应该工作:

这是内容,把里面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你应该为你解雇'消息'事件。

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

希望这会有所帮助。

+0

@NedasMikoleika在这种情况下,将** second.js **重命名为** main.js **,就是这样或者我在这里错过了一些东西? – Ismail

+0

我实际上在** main.js **文件中包含了其他所有内容(我的服务器的其余部分)。 – Nedas

+0

@NedasMikoleika没问题,只需将** second.js **的内容添加到您的** main.js **文件中即可。 – Ismail

1

你没有在mini.js中导出你的EventEmitter实例。这种加入mini.js:

module.exports = ee; 

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

您遇到的另一个问题是您在mini.js中发出testing之前second.js添加了其testing事件处理程序,因此它最终会丢失该事件。

+0

对此有任何可能的修复? – Nedas