Я пытаюсь создать канал, к которому я могу присоединиться, используя Flask socketio и Javascript.
Все мои операторы отладки запускаются, указывая на то, что все инициализируется, но когда я пытаюсь перехватить сообщение, отправленное из моего маршрута Flask/socket-io, который, как я полагаю, выполняет фактическое изменение комнаты, я получаю Uncaught ReferenceError: Invalid left-hand side in assignment
в своей консоли, ссылаясь на строка в моем JS-файле let message = data.msg;
в разделе:
socket.on('status', data => {
let message = data.msg;
document.querySelectorAll('#messages') += message;
});
Я пробовал писать data.msg
разными способами (например, с обратными кавычками, например, ${data.msg}, окруженный обратными кавычками, как будто это часть отформатированной строки и т. д.), но ничего не сработало. Я читал документы, и они были скудны в деталях. Кажется, нет примеров того, как сделать это эффективно в Интернете. Большинство людей предпочитают node.js, но я фанат Flask.
Как я могу присоединиться к своей комнате и общаться только в этой комнате? Мне нужно разрешить пользователям создавать столько, сколько они хотят.
Вот маршрут во Flask:
@socketio.on('join')
def on_join(data):
username = data['username']
room = data['room']
join_room(room)
emit("status", {'msg': username + 'has joined the room'}, room=room)
Вот сопровождающий JS:
var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port);
if (!socket) console.log("Socket not connected!");
socket.on('connect', () => {
console.log("socket connected");
// after socket connect, configure channel button
document.querySelectorAll('button').forEach(button => {
button.onclick = () => {
console.log("button click fired!");
let username = localStorage["login"]
let room = button.dataset.room;
console.log("ChannelName" + room);
socket.emit("join", {'username':username, "room":room});
};
});
socket.on('status', data => {
console.log("JOINED!")
let message = data.msg;
document.querySelectorAll('#messages') += message;
});
Обратите внимание, что ошибка возникает прямо перед присвоением div #message
.
EDIT При распаковке ошибки обнаруживается несколько ссылок на минимизированный JS-файл flask, который требуется socket-io. Он находится в разделе <head>
раздела layout.html
. Размещение в <body>
вызвало серьезные ошибки, препятствующие развитию всех функций, связанных с сокетами.
messages:134 Uncaught ReferenceError: Invalid left-hand side in assignment
at r.socket.on.data (messages:134)
at r.n.emit (socket.io.min.js:1)
at r.onevent (socket.io.min.js:1)
at r.onpacket (socket.io.min.js:1)
at n.<anonymous> (socket.io.min.js:1)
at n.emit (socket.io.min.js:1)
at n.ondecoded (socket.io.min.js:1)
at s.<anonymous> (socket.io.min.js:1)
at s.n.emit (socket.io.min.js:1)
at s.add (socket.io.min.js:2)