Я использую C9 и реализую функцию сообщений.
Пользователь_1 вошел в систему, заходит в свой почтовый ящик, выбирает одно имя контакта, появляются все сообщения об этом имени контакта.
Теперь, пользователь user_2 вошел в систему, зашел в свой почтовый ящик, увидел имена своих контактов, НО, со своей консоли, если он вводит какое-либо имя контакта user_1, появляются сообщения !!!!!!!
похоже, старые значения хранятся в сокете.
в файле ejs на стороне клиента: я получил выбранное имя из списка контактов, отправил его через socket.emit с функцией обратного вызова.
на стороне сервера: я получаю имя из socket.on
и я ищу сообщения об этом имени, сохраняю их в массиве и отправляю обратно через тот же канал.
на стороне клиента: он получает массив и показывает сообщения, связанные с этим именем.
но из браузера консоли, если пользователь вводит имя из списка другого пользователя, он также получает свои сообщения.
Я пытался отправить данные и получить их по разным каналам, но я получил то же самое.
В1: как я могу удалить старые значения и запретить пользователям получать чужие сообщения?
Q2: есть ли другой способ отправить данные из файла 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 );
}) ;
});
});