我似乎遇到了使用socket.io从客户端到服务器的通信问题。
首先,我发送的JSON对象
loginInfo = { email: 'username', password: 'password' }
在客户端,我有:
socket.emit('user:login', loginInfo);
然后在服务器端我有
socket.on('user:login', function(loginInfo) {
console.log('data being sent is:\n' + loginInfo);
});
这将在控制台中打印出来:
data being sent is:
function ack() {
self.log.debug('sending data ack packet');
socket.packet({
type: 'ack'
, args: util.toArray(arguments)
, ackId: packet.id
});
}
同样如果我做
socket.on('user:login', function(loginInfo) {
console.log('data being sent is:\n' + loginInfo.password);
});
控制台打印出来:
data being sent is:
undefined
我过去曾使用过socket.io,之前从未遇到过这个问题,所以我必须做一些奇怪的事情。如果有人知道这个问题的原因,我将非常感谢有关如何解决这个问题的见解。
编辑:问题与打印出的内容没有关系,我只是用它来说明我的问题,即loginInfo JSON要么没有被客户端正确发送,要么没有被服务器接收正常。我的目标是让服务器接收loginInfo,以便我可以处理数据。
谢谢!
答案 0 :(得分:1)
尝试将数组作为对象的属性......无论出于什么原因对我有用;
messageIds = [1,2,3,4,5,6];
这不起作用:
socket.emit('updateMessage',JSON.stringify(messageIds));
这确实有效:
socket.emit('updateMessage',{1:messageIds});
奇怪的错误,不确定原因。
答案 1 :(得分:0)
您需要对对象进行字符串化以将其附加到字符串,否则行为将无法预测:
console.log('data being sent is:\n' + JSON.stringify(loginInfo));
答案 2 :(得分:0)
您是否有可能在客户端使用名为loginInfo
的函数?我相信socket.emit('user:login', loginInfo);
行正在发送函数而不是参数。作为socket.emit
中的参数的函数用于获取确认。