烧瓶插座,选择房间时出现按键错误

时间:2019-07-30 11:14:31

标签: javascript python flask socket.io flask-socketio

如果我张贴的方式不好,请原谅我,但我不知道错误在哪里。 我使用Flask-Socket和SocketIO与五个房间进行了小型交谈。我这样设置房间:

    ROOMS = ["waiting room", "food", "news", "games", "coding"]

然后我将它们放到html中:

    @app.route("/chat", methods=['GET', 'POST'])
    @login_required
    def chat():

    return render_template('chat.html', username=current_user.username, rooms=ROOMS)

在模板上:

    {%for room in rooms%}
            <p class="select-room"> {{ room }}</p>
          {% endfor %}

问题是,当我尝试仅将邮件发送到我所在的房间时:

    @socketio.on('message')
    def message(data):
        time_stamp = time.strftime('%b-%d %I:%M%p', time.localtime())
        send({'msg': data['msg'], 'username': data['username'], 'time_stamp':time_stamp}, room=data['room'])

和来自客户:

    document.querySelector('#send-message').onclick = () =>{
    socket.send({'msg': document.querySelector('#user_message').value,
    'username': username, 'room': room});
  }

这使我犯了关键错误:

     send({'msg': data['msg'], 'username': data['username'], 'time_stamp':time_stamp}, room=data['room'])
KeyError: 'room'

当我尝试切换房间时也会发生这种情况(使用此方法离开一个房间并连接其他房间):

    function leaveRoom(room) {
      socket.emit('leave', {'username': username, 'room': room});

      document.querySelectorAll('.select-room').forEach(p => {
          p.style.color = "black";
      });
  }

    function joinRoom(room) {
      socket.emit('join', {'username' : username, 'room' : room});
      // Clear message area
      document.querySelector('#display-message-section').innerHTML = '';
  };

对于房间选择,我使用:

    document.querySelectorAll('.select-room').forEach(p => {
      p.onclick = () => {
          let newRoom = p.innerHTML
          // Check if user already in the room
          if (newRoom == room) {
              msg = `You are already in ${room} room.`;
              printSysMsg(msg);
          } else {
              leaveRoom(room);
              joinRoom(newRoom);
              room = newRoom;
          };
      };
  });

我在哪里犯错? 完整的代码在这里:

https://pastebin.com/QXiBQG2u
https://pastebin.com/zfEtV4ZX
https://pastebin.com/wfkqNjf9

0 个答案:

没有答案
相关问题