0
我有一些應該監聽某些事件並處理它們的代碼,但事件從來沒有真正發出,或者監聽器從來沒有捕獲它們。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);
});
有什麼問題就在這裏:這個事件是不是正在發射,還是聽者沒有聽?
它可能也只是我失蹤的東西。你知道他們說什麼兩個頭......
TIA :)
我認爲this.emit不會工作,因爲你在回調中,請參閱服務器實例,但涉及回調上下文。而不是this.self =這個嘗試做var self = this,然後在回調裏面做self.emit ... – eveiga 2013-03-09 00:05:18
就是這樣。 :)這只是範圍。 – ChaoticWeg 2013-03-09 04:15:49
如果你願意,把它作爲答案,我會upvote和接受。謝謝,@eveiga。 :) – ChaoticWeg 2013-03-09 04:16:21