从 Flask 套接字中检索消息引发 "Invalid left-hand side in assignment"
Retrieving message from Flask socket raises "Invalid left-hand side in assignment"
我正在尝试创建一个我可以使用 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;
});
注意,错误发生在之前赋值给#message
div.
编辑
解包错误揭示了对 flask socket-io 所需的缩小 JS 文件的多个引用。它位于 layout.html
的 <head>
部分。 <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)
这是无效的:document.querySelectorAll('#messages') += message;
document.querySelectorAll('#messages')
会给你一个包含 DOM 个元素的列表。
此外,元素 ID 应该是唯一的,因此您可能应该使用 document.querySelector('#messages')
以便只检索一个元素,而不是列表。
您不能 add/concat 以这种方式直接向元素添加文本。您可能正在寻找类似 document.querySelector('#messages').innerHTML += message;
的内容
我正在尝试创建一个我可以使用 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;
});
注意,错误发生在之前赋值给#message
div.
编辑
解包错误揭示了对 flask socket-io 所需的缩小 JS 文件的多个引用。它位于 layout.html
的 <head>
部分。 <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)
这是无效的:document.querySelectorAll('#messages') += message;
document.querySelectorAll('#messages')
会给你一个包含 DOM 个元素的列表。
此外,元素 ID 应该是唯一的,因此您可能应该使用 document.querySelector('#messages')
以便只检索一个元素,而不是列表。
您不能 add/concat 以这种方式直接向元素添加文本。您可能正在寻找类似 document.querySelector('#messages').innerHTML += message;