在node.js
和socket.io
中,许多事件都可以由一个函数处理:
socket.on( 'async.popular_qtns', rows.bind(socket) );
socket.on( 'async.recent_qtns', rows.bind(socket) );
socket.on( 'async.enum_chn', rows.bind(socket) );
socket.on( 'async.enum_tag', rows.bind(socket) );
function rows() {
var socket = this;
switch( socket.?? ) {
case 'async.popular_qtns': // blah blah
break;
case 'async.recent_qtns': // blah blah
break;
}
}
如何获取事件名称,例如与socket.on()
相关联的“async.enum_tag”?
答案 0 :(得分:3)
我认为事件名称不会报告给回调函数。你可以尝试这样的事情:
var rowsBound = rows.bind(socket);
socket.on( 'async.popular_qtns', function() { rowsBound('asyn.popular_qtns'); } );
socket.on( 'async.recent_qtns', function() { rowsBound('asyn.recent_qtns'); } );
socket.on( 'async.enum_chn', function() { rowsBound('asyn.enum_chn'); } );
socket.on( 'async.enum_tag', function() { rowsBound('asyn.enum_tag'); } );
或者,可能更好:
var rowsBound = rows.bind(socket),
events = ['async.popular_qtns', 'async.recent_qtns', 'async.enum_chn', 'async.enum_tag'];
for (var i in events)
(function(e) { socket.on(e, function() { rowsBound(e); }); })(events[i]);
答案 1 :(得分:0)
此外,您可以将express.io与express.io-middleware一起使用,其中添加了存储事件名称的req.io.event和存储事件名称的第一部分的req.io.namespaces,由以下各项分隔: ”。