如果我张贴的方式不好,请原谅我,但我不知道错误在哪里。 我使用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