【问题标题】:How to make changes to a Javascript object from Node.js/Socket.io listener?如何从 Node.js/Socket.io 监听器更改 Javascript 对象?
【发布时间】:2015-04-13 03:25:43
【问题描述】:

对不起,如果标题太模糊,我不太确定问题出在哪里。

我正在尝试制作一个允许用户启动和加入房间的基本程序。当按下开始按钮时,房间会以随机字符串代码开始,其他用户可以使用该代码加入。我将每个房间的成员计数器存储在一个对象“房间”中,使用房间代码作为键,计数作为值。但是,当尝试增加值时,它会将值返回为 NaN。

我在下面附上了我的代码,它使用 express 4.10.2 和 socket.io 1.3.5:

index.html中的javascript,包含在body标签中

  var socket = io.connect();

  //possible characters in room code
  var chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

  //for generating random room codes
  function randomString(c,length){
    var str = ''
    for(var i=0; i<length;i++){
      str += c[Math.round(Math.random()*(c.length-1))]
    }
    return str;
  }

  $('#join').submit(function(){
    socket.emit('joinroom', $('#code').val());
  });

  $('#start').submit(function(){
    socket.emit('startroom', randomString(chars,5));
  });

  //listener for 'updatecounter', updates room member count
  socket.on('updatecounter', function(count){
    $('#roomcount').append('<p>'+count.toString()+'</p>');
  });

  //listener for 'updateroom' - should update room code at top
  socket.on('updateroom', function(code){
    $('#roomcode').append('<h1>'+count.toString()+'</h1>');
  });

我的 app.js 有问题的部分:

//available rooms
var rooms = {};

io.sockets.on('connection', function(socket){
    // when the client emits 'joinroom', this listens and executes
    socket.on('startroom', function(room){
        console.log('Starting room: '+room);
        //add to serverside list of rooms
        rooms[room]=1;
        socket.room = room;
        socket.join(room);
    });

    // when the client emits 'joinroom', this listens and executes
    socket.on('joinroom', function(room){
        console.log('Joining room '+room);
        //leave previous room
        socket.leave(socket.room);
        //join new room
        socket.join(room);
        //update socket session room title
        socket.room = room;
        //increase serverside counter
        rooms[room]++;
    });

    socket.on('disconnect', function(){
        //decrement counter
        rooms[socket.room]--;
        //check if room is now empty
        if(rooms[socket.room]===0){
            delete rooms[socket.room]
        } 
        //leave the room
        socket.leave(socket.room);
    });
});

感谢任何帮助,我是 JS 以及 Node.js 和 Socket.IO 的初学者。

【问题讨论】:

    标签: javascript node.js socket.io


    【解决方案1】:

    您的错误可能与客户端上的“updateroom”侦听器有关。您的参数名称是“代码”,但您附加了计数。这就是你获得 NaN 值的地方?

    【讨论】:

    • 我更正了那里的错误,但在 rooms[room]++ 之后添加了 console.log(rooms[room]);行仍然返回 NaN。
    • 我会说只有断开连接可能会导致这种情况,我看到你想通了。
    【解决方案2】:

    原来错误是由于我的 HTML 代码中的表单提交导致页面刷新导致与服务器断开/重新连接。

    【讨论】:

      猜你喜欢
      • 2012-08-24
      • 2013-11-29
      • 1970-01-01
      • 2013-04-09
      • 2020-08-06
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多