在套接字.在回调时获取套接字对象中的监听器名称

in socket.on callback get name of listener in the socket object

本文关键字:套接字 监听器 对象 回调 获取      更新时间:2023-09-26

在哪里可以找到套接字对象中的套接字侦听器名称?

的例子:

socket.on('test', function(data) {
  // is there a property of socket object that is equal to 'test' ?
})

编辑:我需要这个,因为我的监听器和回调器在不同的文件中,我不想手工复制监听器的名称。

socketController with listeners:

'use strict';
const onSendMessage = require('./message/send');
const onGetMessages = require('./message/get');
const onAskFriend = require('./friends/ask');
const onAcceptFriend = require('./friends/accept');
const onRemoveFriend = require('./friends/remove');
const onGetFriends = require('./friends/get');
module.exports = (socket) => {
   // message
   listenTo(socket, 'sendMessage', onSendMessage);
   listenTo(socket, 'getMessages', onGetMessages);
   // friends
   listenTo(socket, 'getFriends', onGetFriends);
   listenTo(socket, 'askFriend', onAskFriend);
   listenTo(socket, 'acceptFriend', onAcceptFriend);
   listenTo(socket, 'removeFriend', onRemoveFriend);
};
function listenTo(socket, name, callback) {
   socket.on(name, data => callback(socket, data));
}

socket getFriends:

'use strict';
const db = require('../../database/mongo').collections;
const ObjectID = require('mongodb').ObjectID;
module.exports = (socket) => {
   const query = {
      ownerid: ObjectID(socket.id)
   }
   db.friends.find(query).toArray((err, friends) => {
      if (err) {
         return socket.emit('getFriends', {status: 500});
      }
      socket.emit('getFriends', {status: 200, body: friends});
   });
};

我不喜欢每次都手写socket.emit('getFriends'),这样容易出错。

我不知道你是否能做到这一点(我认为不能),但为什么不干脆:

function listenTo(socket, name, callback) {
    socket.on(name, data => callback(socket, name, data));
}

:

module.exports = (socket, message) => {
   const query = {
      ownerid: ObjectID(socket.id)
   }
   db.friends.find(query).toArray((err, friends) => {
      if (err) {
         return socket.emit(message, {status: 500});
      }
      socket.emit(message, {status: 200, body: friends});
   });
};