繁体   English   中英

Node.js Socket.io mysql返回重复项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM