javascript - 使用 Node 和 Socket.io 我试图传递一个简单的数组,但我什么也没得到。我错过了什么?

标签 javascript node.js socket.io

我关注了 net tuts tutorial用套接字和 Node 构建一个简单的聊天应用程序,现在我正在尝试扩展该应用程序以允许人们玩我编写的游戏,所以我想让人们列出可用的游戏,但我似乎做不到将一个简单的测试数组从服务器传递到客户端。

我会让代码自己说话:

相关服务器代码:

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 记录游戏,它始终只是一个空数组,在我的脑海中,它应该包含字符串 "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); 时触发。

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

关于javascript - 使用 Node 和 Socket.io 我试图传递一个简单的数组,但我什么也没得到。我错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18832402/

相关文章:

javascript - 在Jquery中设置值,添加了两倍相同的值

javascript - childObj.prototype = Object.create(parentObj.prototype) 和 childObj.prototype = ParentObj.prototype 有什么区别?

node.js - 套接字.io : How do I handle all incoming messages on the server?

javascript - Socket.IO 应用程序未启动,无输出

javascript - 将数据传递给 Vue 组件?

javascript - 为什么 Jest 测试命名约定是这样的?

javascript - 将时间增量和速度纳入速度/摩擦运动

javascript - 创建新用户时未调用 beforeCreate 方法

javascript - 如何在 Mongoose 聚合中找到平均值

javascript - NodeJS - 如何将所有 console.log 写入文件?