使用Node和Socket.io我想通过一个简单的数组,我什么都没有。 我错过了什么?

我跟着net tuts教程用socket和node构build了一个简单的聊天应用程序,现在我试图扩展应用程序,让人们玩我写的游戏,所以我想让人们列出可用的游戏,但我似乎无法通过从服务器到客户端的简单testing数组。

我会让代码自己说话:

相关的服务器代码:

var games = ["test"]; io.sockets.on('connection', function (socket) { socket.emit('message', { message: 'welcome to the chat' }); socket.on('gameList', function (data) { io.sockets.emit("games",games); }); socket.on('send', function (data) { io.sockets.emit('message', data); }); }); 

客户端:

 window.games = []; $("#listGames").click(function(){ socket.emit("gameList", function(data){ window.games = data; }) }) 

所以我console.log游戏之前和之后的button点击,它总是只是一个空的数组,当在我的脑海,它应该包含string"test"

那么我哪里错了?

注意:即使教程错过了,也会在代码库中添加jQuery。

您正在使用socket.emit()尝试接收数据。 这只是发送数据到服务器。 您需要客户端的games事件处理程序来相应地处理事件。

 window.games = []; $("#listGames").click(function() { socket.emit('gameList'); }); socket.on('games', function (games) { window.games = games; }); 

games的事件处理程序是执行io.sockets.emit('games', games);时会触发的io.sockets.emit('games', games); 在服务器端。

还要确保始终通过Socket.IO传递一个对象作为响应。 更改服务器端代码: var games=[]; var games={'games':[]}; 或类似的东西。