Javascript 在socket.io中调用socket.connect()时,如何传递附加数据?
我试图找到一种方法来传递额外的数据,比如用户名、头像url,当用户点击登录时连接到套接字。例如:Javascript 在socket.io中调用socket.connect()时,如何传递附加数据?,javascript,sockets,socket.io,Javascript,Sockets,Socket.io,我试图找到一种方法来传递额外的数据,比如用户名、头像url,当用户点击登录时连接到套接字。例如: const logIn = ({ username, avatar }) => { socket.auth = { username }; socket.connect({ query: { username: username, avatar: avatar } }); } 在服务器端: io.use((socket, next) => { console.log
const logIn = ({ username, avatar }) => {
socket.auth = { username };
socket.connect({ query: { username: username, avatar: avatar } });
}
在服务器端:
io.use((socket, next) => {
console.log("===> Data:", socket.request._query);
});
但我并没有得到用户名和化身字段的任何键值。我试图搜索文档,但找不到与传递数据有关的socket.connect()的任何信息
如何在socket.connect()中传递数据?使用JWT并将该数据作为对象的一部分传递 因此,当您“授权”时,它会将JWT与avitar等一起发送回 当您将其发送到服务器并解码令牌时,可以将其设置为套接字对象的一部分 例如(我们目前使用的是jsonwebtoken包) 然后,您可以在发出时访问它,因为套接字ID对于用户是唯一的,它应该保存值,如果他们断开/重新连接,则令牌仍将包含值
在群集模式下,使用redis socket.io并将其作为hset传递,以使用socketID存储数据一旦成功连接,只需发送一条消息。我考虑过这一点,但我希望避免将状态存储在父组件中,而只需使用登录方法本身将所有内容发送到服务器。
// verify token
jwt.verify(token, '[password]', (err, decoded) => {
try{
/* connecting */
socket.avitar = decoded.avitar;
socket.nickname = "nick name";
if(err) return next(err);
//('success!')