其他模块中的节点事件发射器
Node event emitter in other modules
我有 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
用节点执行文件时出错。
我在这里做错了什么?
谢谢
您没有在 mini.js 中导出 EventEmitter
实例。将此添加到 mini.js:
module.exports = ee;
如果要导出其 EventEmitter
实例,则还需要在 second.js 中添加类似的行,以便 main.js.
您将 运行 遇到的另一个问题是,在 second.js 添加其 testing
事件处理程序之前,您在 mini.js 中发出 testing
,所以它最终会错过那个事件。
这个应该有效:
这是要放在里面的内容 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
你应该会为你触发 'message' 事件。
您可以使用此模式在模块之间实现任何级别的消息传递。
希望这对您有所帮助。
我有 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
用节点执行文件时出错。
我在这里做错了什么? 谢谢
您没有在 mini.js 中导出 EventEmitter
实例。将此添加到 mini.js:
module.exports = ee;
如果要导出其 EventEmitter
实例,则还需要在 second.js 中添加类似的行,以便 main.js.
您将 运行 遇到的另一个问题是,在 second.js 添加其 testing
事件处理程序之前,您在 mini.js 中发出 testing
,所以它最终会错过那个事件。
这个应该有效:
这是要放在里面的内容 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
你应该会为你触发 'message' 事件。
您可以使用此模式在模块之间实现任何级别的消息传递。
希望这对您有所帮助。