首页 > 解决方案 > 从服务器发出的Javascript套接字然后从客户端监听不起作用

问题描述

我正在做这个从服务器端发出并从客户端监听的代码,连接永远不会结束,直到客户端刷新或退出页面但事实并非如此,问题是客户端上的代码没有得到执行并且没有错误显示在日志上。

服务器端代码:

io.on('connection', function(socket) {
        console.log("New socket connection");

        

        socket.on('joinApp', ({msg, password}) =>{

            let username;
            let rooms;

            
            model.findOne({username: msg}, function(err, found){
                if(!err){
                    var checka = false;
                    if(found){
                        if(found.password === password){
                            user = userLogged(socket.id, msg, found.rooms);
                            username = getUserName(socket.id).username;
                            rooms = getUserName(socket.id).rooms;
                            console.log(msg + " Has entered the chat");
                            console.log(socket.id);
                            checka = true;
                        }else{
                            console.log("Incorrect password");
                        }
                    
                    
                    }else{
                        console.log("User not found");

                    }
                    io.to(socket.id).sockets.emit("checker", checka);
                }
            });

        
        


            socket.on('myRooms', () =>{
                let user = getUserName(socket.id);
                let username = user.username;
                let rooms = user.rooms;

                if(user.rooms.length === 0){
                    console.log(username + " You have no rooms");
                    socket.emit("yourRooms", {username, rooms});
                }else{


                }

            });









        socket.on('disconnect', () => {
            console.log("Disconnected");


        });


        });

});

这是我在我的 express js 文件中的代码,如果你在这里看到:

io.to(socket.id).emit("yourRooms", {username, rooms});

上面的行是问题所在,我正在发出我要在客户端收听但客户端不收听的信号(下面的客户端代码):

let title = document.getElementById("title");
let rooms = document.getElementById("rooms");


    console.log(socket.id);

    socket.on("yourRooms", (username, rooms) => {


        if(rooms.length === 0){
            rooms.innerHTML = "You have no rooms";
        }

        title.innerHTML = user + "'s rooms";


    });

这部分代码将打印socket.id客户端的确切信息,因此这里没有问题。

console.log(socket.id);

我没有声明另一个套接字实例,因为那样它不起作用

我在我的代码的另一部分中使用了这种精确的方法并且它正在工作,它在我创建我的套接字实例的文件中:

const socket = io();

我已经尝试了几个小时,日志中没有错误,并且socket.id当我在遇到问题的客户端脚本中 console.log 时是正确的,所以我不知道我做错了什么。

标签: javascriptexpresssockets

解决方案


您正在快速发出一个对象

io.to(socket.id).emit("yourRooms", {username, rooms});

你正在客户端监听不同的参数

socket.on("yourRooms", (username, rooms) => {

尝试将其更改为

socket.on("yourRooms", ({username, rooms}) => {

推荐阅读