【发布时间】:2017-08-04 01:37:30
【问题描述】:
我想我发现了一个错误。如果我将 socket.join(/any room here/) 放在 connection.query 函数中,它不会简单地加入那个房间。有趣的事实是 console.log 有效:
function registerInRoom (user, room) {
var post_room = {Users_user_id: user, Rooms_room_id: room, ur_id: undefined};
connection.query('INSERT INTO mydb.users_has_rooms SET ?', post_room, function(err) {
if (err) throw err;
socket.room = room;
console.log("joined room");
socket.join("Room 1");
});
};//registerInRoom
这是工作代码:
function registerInRoom (user, room) {
var post_room = {Users_user_id: user, Rooms_room_id: room, ur_id: undefined};
connection.query('INSERT INTO mydb.users_has_rooms SET ?', post_room, function(err) {
if (err) throw err;
socket.room = room;
console.log("joined room");
});
socket.join("Room 1");
};//registerInRoom
我的问题是……我在思考过程中做错了什么?
【问题讨论】:
-
我相信你有一个词法范围问题,因为套接字不一定存在于该查询的本地,并且因为它无法访问它,它仍然是未定义的,因此没有做任何事情。
-
在节点调试器中它说:
socket.io:socket joining room 1 +101ms socket.io:socket joined room 1并在此房间套接字中发送消息后发出事件“发送消息”并调度它,但客户端没有收到数据包“新消息”,而在第二种情况下它确实。
标签: javascript mysql node.js socket.io