在socket.on回调中获取套接字对象中侦听器的名称

时间:2016-10-29 10:02:04

标签: javascript node.js socket.io

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

示例:

socket.on('test', function(data) {
  // is there a property of socket object that is equal to 'test' ?
})
编辑:我想要这个,因为我的听众和我的回调都在不同的文件中,我不想手工复制听众名称。

带侦听器的socketController:

'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'),这可能容易出错。

1 个答案:

答案 0 :(得分:1)

如果你能做到这一点,我不知道(我认为没有),但为什么不简单:

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});

   });

};