javascript - 从服务器发出的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 时是正确的,所以我不知道我做错了什么。
解决方案
您正在快速发出一个对象
io.to(socket.id).emit("yourRooms", {username, rooms});
你正在客户端监听不同的参数
socket.on("yourRooms", (username, rooms) => {
尝试将其更改为
socket.on("yourRooms", ({username, rooms}) => {
推荐阅读
- python - 无法添加列表成员
- c# - 一旦标签超出面板宽度,如何使标签重新出现
- php - 通过数据库中的链接显示图像?(PHP/MYSQLI) 新手
- wordpress - 访问控制允许 WordPress 子域的来源错误
- arrays - 将 CSV 数组转换为 JSON NodeJS
- python - 给定字符串中的反转元音,考虑大写/小写
- time - 在SAS中将十进制时间转换为分钟
- html - 动画不工作。从左移动:0px 到左:200px
- javascript - 如何用它的文本内容替换 html 对象?
- internet-explorer-11 - IE11 尝试查看源代码或使用 F12 时关闭