在哪里可以找到套接字对象中的套接字侦听器名称?
示例:
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')
,这可能容易出错。
答案 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});
});
};