2015-04-28 17 views
6

Tôi đang xây dựng một máy chủ nút trung gian hoạt động như cả máy khách và máy chủ, tôi muốn nghe sự kiện máy chủ phụ và sau đó chuyển tiếp sự kiện tới máy khách (trình duyệt) sau khi xử lý.Nhận tên sự kiện trong chức năng gọi lại của sự kiện trong socket io

var socket = require('socket.io'), 
    client = require('socket.io-client'); 

socket.on('event_name', function(data) { 
    /* Logic to process response and relay to client */ 
    client.emit(this.event, data); // How can I get name of the outer event? 
}); 

Tôi muốn nhận giá trị event_name trong gọi lại. Làm thế nào tôi có thể làm được?

Trả lời

3

Bạn có thể thử một cái gì đó tương tự:

// List of events relayed to client 
var events = ['first_event', 'second_event', 'third_event']; 

for (var i in events) 
    (function(e) { 
     socket.on(e, function(data) { 
      console.log(e); // You have access to the event name 
      client.emit(e, data); // Relay to client 
     }); 
    })(events[i]); 
+0

Cảm ơn. Điều này làm việc cho tôi. !! –

6

Tôi không chắc liệu bạn có thể lấy tên sự kiện từ cuộc gọi lại hay không nhưng bạn có thể giải quyết vấn đề này.

var socket = require('socket.io'); 

function registerEvent(eventName, cb) { 
    socket.on(eventName, function() { 
    var args = [].slice.apply(arguments); 
    args.unshift(eventName); 
    cb.apply(null, args); 
    }); 
} 

registerEvent('my_event', function (eventName, data) { 
    // now you can access event name 
    // it is prepended to arguments 
    console.log('Event name', eventName); 
}); 
Các vấn đề liên quan