2013-03-08 154 views
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 :)

回答

1

我認爲this.emit不會工作,因爲你在回調的時候,這不會是指服務器實例,但回調上下文。而不是this.self =這試圖做var self = this,然後在回調裏面做self.emit ...

+1

我認爲this.emit不會工作,因爲你在回調中,請參閱服務器實例,但涉及回調上下文。而不是this.self =這個嘗試做var self = this,然後在回調裏面做self.emit ... – eveiga 2013-03-09 00:05:18

+0

就是這樣。 :)這只是範圍。 – ChaoticWeg 2013-03-09 04:15:49

+0

如果你願意,把它作爲答案,我會upvote和接受。謝謝,@eveiga。 :) – ChaoticWeg 2013-03-09 04:16:21