我正在使用c9,并实现了消息功能。 user_1登录,进入其收件箱,选择一个联系人姓名,有关该联系人姓名的所有消息都会出现。 现在,user_2登录,进入他的收件箱,如果他输入user_1的任何联系人姓名,则从控制台查看他的联系人姓名BUT,消息出现!!!!! 看起来旧值仍然存储在套接字上。
客户端ejs文件上的:我从联系人列表中获得了选定的名称,并通过具有回调功能的socket.emit发送。 在服务器端:我从socket.on获得名称 我正在搜索有关该名称的消息,将它们保存在一个数组中,然后通过同一通道将其发送回去。 在客户端:它获取数组并显示与该名称相关的消息。 但是从控制台浏览器,如果用户从另一个用户的列表中输入名称,他也会收到他的消息。
我试图通过不同的渠道发送和接收数据,但是我得到了同样的东西。
Q1:如何删除旧值并防止用户收到其他人的消息? 问题2:还有另一种方法可以从ejs文件发送数据并从套接字以外的服务器获取数据?
在客户端:
socket.emit('indata', oneSelectedName, function (data) {
for (let i = 0; i < data.length ; i ++ ){
addMessage(data[i].userToName , data[i].body);
}
});
在服务器端:
io.on("connection", function(socket) {
socket.on('indata', function (recipientName, fn) {
MessageModel.find({'$or': [{'userFromName': senderName},
{'userToName': senderName }]}, function (err , allMessages){
let selectedNameMesagesArray=[];
allMessages.forEach(function(message){
console.log("selectedNameMesagesArray 00000 " , message);
if (message.userToName === recipientName || message.userFromName === recipientName){
console.log("selectedNameMesagesArray 11111 ");
selectedNameMesagesArray.push(message);
}
});
console.log("selectedNameMesagesArray 2222 " , selectedNameMesagesArray );
fn(selectedNameMesagesArray );
}) ;
});
});