提问人:FiFi 提问时间:9/3/2021 最后编辑:FiFi 更新时间:9/3/2021 访问量:177
如何在客户端JS上获取 socket.io 的查询字符串?
How to get the query string on client side JS for socket.io?
问:
我会尽量详细。我正在使用 Express、Node.js 和 Mongoose 构建一个聊天应用程序,朋友们可以在其中亲自互相发送消息。我有一个活动用户列表(呈现在线用户),从列表中,我想单击我要发送消息的用户以发送个人消息。
我的方法是:当我单击用户时,页面会生成一个包含该特定用户 ID 的查询字符串,因此它具有接收者 ID,而我有发送者 ID。所以,我可以发送消息。
但是,由于某种原因,我无法从客户端 JS 或通过 socket.io 在客户端和服务器端监听查询字符串以捕获接收方 ID? 现在,我的代码是这样存在的: 服务器端 socket.io:
let http=require("http"); //for socket.io
let socketio=require("socket.io");
let users={};
let send=[];
io.on("connection", async (socket)=>{
console.log("new WS connection");
socket.on("login", async function(user_id){
socket.handshake.session.user_id = user_id;
socket.handshake.session.save();
});
socket.on("logout", function(user_id){
if(socket.handshake.session.user_id){
delete socket.handshake.session.user_id;
socket.handshake.session.save();
}
});
socket.on("disconnect", async ()=>{
})
socket.on("chatMsg", async msg => {
let sender = await User.findById(socket.handshake.session.user_id);
io.emit("chatMsg", utils.formatMessage(sender.name, msg));
})
})
客户端 socket.io:
let chatForm=document.querySelector("#chat-form");
let fullMessageBox=document.querySelector(".full-message-box");
// let ul=document.querySelector(".the-ul");
let li=document.querySelectorAll(".active-people-li");
let div2=document.querySelector(".active-people");
let socket=io();
let record=[];
socket.on("chatMsg", message=>{
outputMessage(message); //Outputs message to DOM
fullMessageBox.scrollTop=fullMessageBox.scrollHeight;
});
chatForm.addEventListener("submit", (event)=>{
event.preventDefault();
let msgInput=document.querySelector("#msg-input").value;
socket.emit("chatMsg", msgInput);
document.querySelector("#msg-input").value="";
document.querySelector("#msg-input").focus();
})
function outputActiveUsers(msg){ //Outputs list of active users and generates the query string
console.log("receiver ID", msg.id);
console.log("receiver socket id", socket.id);
let li=document.createElement("li");
li.classList.add("active-people-li");
li.innerHTML= `<div class="active-sidebar">
<div class="div-of-img">
<img src="../files/profile.png" alt="" class="active-profile-img">
</div>
<div>
<a href="?receiverID=${msg.id}"><h4>${msg.name}</h4></a>
<h5>Hi. Is this you, bro?</h5>
</div>
</div>`;
document.querySelector(".the-ul").appendChild(li);
}
答:
0赞
leonllr
9/3/2021
#1
我认为您可以尝试通过套接字事件发送查询字符串
评论
0赞
FiFi
9/3/2021
它第一次就起作用了。但是,在那之后,它就没有了。为什么?我已经添加了代码。如果我缺少任何需要上传的信息,请告诉我,我会对其进行编辑。因为函数 outputActiveUsers 生成查询字符串,但它在客户端连接和断开连接时被调用,所以它为什么会搞砸,也许?所以,它不起作用
0赞
FiFi
9/3/2021
有没有办法在生成查询字符串后立即捕获?
0赞
leonllr
9/4/2021
链接我在这里看到了一些关于这一点@FiFi
0赞
FiFi
9/4/2021
我找不到正确的方法。如果您知道可以做些什么,请更新您的答案。这将意味着很多。我已经找了 3 天了
评论