Node.js - событие не сработает?
У меня есть некоторый код, который должен прослушивать определенные события и обрабатывать их, но либо события на самом деле никогда не генерируются, либо слушатель просто их не перехватывает.
Здесь есть два модуля: сервер, который слушает, и приложение, которое обрабатывает (приложение является основным модулем).
server.js:
var events = require('events'),
util = require('util'),
dgram = require('dgram');
var Server = function() {
this.self = this;
events.EventEmitter.call(this);
this.socket = dgram.createSocket('udp4');
this.init = function(port) {
this.socket.bind(port);
console.log('Listening on port ' + port);
}
this.socket.on('message', function(buf, rinfo) {
var rawInfo = buf.toString().split('&');
var data = {};
for (var i = 0; i < rawInfo.length; i++) {
var key = rawInfo[i].split('=')[0];
var val = rawInfo[i].split('=')[1];
data[key] = val;
}
var type = data.type;
console.log('emitting event type ' + type);
this.emit(type, data);
});
};
util.inherits(Server, events.EventEmitter);
// exports
module.exports = Server;
(это единственный возможный объект, который будет создан):
{ type: 'login',
name: 'x3chaos',
displayname: 'x3chaos',
world: 'world' }
app.js:
var dgram = require('dgram');
var Server = require('./server');
var server = new Server();
server.init(41234);
// FIXME
server.on('login', function(data) {
console.log('received data');
console.log(data);
});
В чем здесь проблема: событие не запускается или слушатель не слушает?
Это также может быть что-то, что я скучаю. Вы знаете, что они говорят о двух головах...
ТИА:)
1 ответ
Я думаю, что this.emit не будет работать, потому что вы находитесь в обратном вызове, и это относится не к экземпляру сервера, а к контексту обратного вызова. Вместо этого.self=this попробуйте сделать var self=this, а затем внутри обратного вызова сделайте self.emit...