我正在使用聊天应用来学习Socket.io,我想在用户发出login
事件时为其分配用户名和颜色。然后我想发送带有message
事件的属性。
io.on('connection', (socket) => {
// Someone sent a message
socket.on('message', (message) => {
io.sockets.emit('message', {
message,
username: socket.username,
color: socket.color,
});
});
// Someone joined the chat
socket.on('login', (data) => {
socket.username = data.username;
socket.color = data.color;
});
});
如果我在socket.username
事件结束时将login
记录到控制台,则会正确记录。但是如果我尝试在message
事件中记录它,那么它是未定义的,并且发出的数据只有message属性。
编辑:问题已解决。问题是我正在使用React并且正在进行不同的套接字连接......或类似的东西。我基本上在根React组件上设置了一个套接字,并将其作为props传递给其他组件。查看this回答。
答案 0 :(得分:1)
您必须使用密钥发送数据
socket.on('message', (message) => {
io.sockets.emit('message', {
message,
username: socket.username,
color: socket.color,
});
});
应该是
socket.on('message', (message) => {
io.sockets.emit('message', {
message: message,
username: socket.username,
color: socket.color,
});
});