[英]Node.js Socket.io mysql returning duplicates
我在socket.io中遇到了这个问题。 每当用户单击链接时,它将转到mysql,提取数据并将其传递回客户端。 我发现当我单击链接n次时,我得到了n个重复项。 如果我单击链接3次,则返回的数组将重复3次。 这是我的客户端,服务器端的问题,还是方法本身全部错误?
客户端:
$(document).on("click", "#view_conv", function(event){
event.preventDefault();
var data = $("#view_conv").data('id');
socket.emit("viewing_conv_get_messages", data, uname);
$("#close_observ_window").show();
socket.on("show_message", function(htmldata){
$("#obvs_content").append(htmldata);
});
});
$("#close_observ_window").click(function(event){
event.preventDefault();
$("#obvs_content").empty();
});
服务器端:
client.query("SELECT id FROM conversations WHERE user_one = ? AND user_two = ? AND active = ?", [name_one, name_two, 1],
function selectCb(err, results){
if(err){ throw err; }
if(results.length > 0){
var convId = "";
var str = "";
for(var i = 0; i < results.length; i++){
convId = str + results[i].id;
}
client.query("SELECT `message`,`sender` FROM chat_messages WHERE conv_id = ? ORDER BY(id) DESC", convId,
function selectCb(err, res){
if(err){ throw err; }
else {
if(res.length > 0){
for(var j=0; j<res.length; j++){
var string_m = '';
var string_send = '';
var message = string_m + res[j].message;
var sender = string_send + res[j].sender;
content = "<b>" + sender + "</b> : " + message + " <br>";
users[users[users.indexOf(admin)]].emit("show_message", content);
console.log(j);
}
}
// recurse_messages(res, admin, 0);
}
});
}
});
在click函数之外编写socket.on。
每次单击#view_conv时,使用当前代码即可添加一个侦听器。 因此,当您单击3次时, show_message事件将有3个侦听器 。
尝试像这样修改代码
客户端:
$(document).on("click", "#view_conv", function(event){
event.preventDefault();
var data = $("#view_conv").data('id');
socket.emit("viewing_conv_get_messages", data, uname);
$("#close_observ_window").show();
});
socket.on("show_message", function(htmldata){
$("#obvs_content").append(htmldata);
});
$("#close_observ_window").click(function(event){
event.preventDefault();
$("#obvs_content").empty();
});
您应该始终尝试独立编写侦听器(即,在所有函数之外)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.