2013-04-22 212 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}); 

奇怪的錯誤,不知道爲什麼。

相關問題