2013-04-22 169 views
2

我似乎遇到了使用socket.io从客户端到服务器的通信问题。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

您需要字符串化的对象将其添加到字符串,否则行为将是不可预测的:

console.log('data being sent is:\n' + JSON.stringify(loginInfo)); 
+0

我很抱歉不够清楚,但服务器端没有收到JSON。应该是JSON的数据片段是这个ack()函数。我想知道为什么数据没有正确发送/接收。 – drdalton 2013-04-22 03:54:16

0

是否有你有一个客户端上的所谓的loginInfo功能的可能性?我相信socket.emit('user:login', loginInfo);行正在发送一个函数,而不是一个参数。作为socket.emit中的参数的函数用于获取确认。

+0

这似乎并不是这样,因为即使我调用'socket.emit('user:login',{username:'username,password:'password'});'我仍然收到相同的'ack( )'在服务器上的功能。 – drdalton 2013-04-22 07:04:13

0

试着让数组成为一个对象的属性......无论出于何种原因,对我而言,

messageIds = [1,2,3,4,5,6]; 

这不起作用:

socket.emit('updateMessage',JSON.stringify(messageIds)); 

该做的工作:

socket.emit('updateMessage',{1:messageIds}); 

奇怪的错误,不知道为什么。

相关问题