在emit.io上获取Double响应发出

时间:2017-10-25 18:23:21

标签: javascript node.js sockets socket.io

我正在节点js和socket.io中创建一个聊天应用程序。我所拥有的是,当用户点击链接转到他或她聊天的用户的收件箱时,即使我发送了点击目标聊天的当前用户的ID以打开其消息和ID他或她通过这两个ID聊天的目标用户我正在检索每个用户的消息。但问题是,在第一次单击时,检索到的消息是可正常工作的对象数组,但是当再次单击相同的目标时,检索到的消息数组的数量是两倍,每次单击它就会使数组的数量增加一倍并检索它们。

要更好地理解,请看一下快照。您可以看到,每次单击时,检索到的数组的数量都是两倍。

enter image description here

我的代码 - NodeJs One

socket.on("get_user_messages",(data)=>{
          console.log(data);
  		  var GET_CLICKED_USER_MESS = "SELECT mess_txt,mess_time,mess_to FROM (select mess_to as user_id,mess_txt,mess_time,mess_id,mess_to from messages where mess_from = '"+data.active+"' AND mess_to='"+data.clicked+"' UNION select mess_to as user_id,mess_txt,mess_time,mess_id,mess_to from messages where mess_from = '"+data.clicked+"' AND mess_to='"+data.active+"' ORDER BY mess_id ASC) sq join users on users.id = sq.user_id";
          con.query(GET_CLICKED_USER_MESS,(err,res)=>{
             if(err) throw err;
             socket.emit("get_ret_messages",result);

          })
       });

收到的JavaScript

var d = document, _id, mess, messs, chatBody = document.getElementsByClassName("indChatBody")[0], result;
     
	      d.addEventListener("click",(e)=>{
	      	  e.preventDefault();
	      	  var event = e.target;
	      	  console.log("clicked");
              if(event.parentNode.className=="indUser" || event.parentNode.className=="ind_user_messages"){
              	if(event.parentNode.className=="ind_user_messages"){
              		_id = event.parentNode.getAttribute("data-id");
              	} else if(event.parentNode.className=="indUser"){
              		_id = event.getAttribute("data-id");
              	}

              	  socket.emit("get_user_messages",{clicked:_id,active:data.active_user});

	              socket.on("get_ret_messages",(data)=>{
	              	 result = [];

	              	 /*for(let i = 0; i<data.length;i++){
	              	 	if(data[i].mess_to == data.active_user){
		              	 	mess = '<span class="mess fromMess"><div class="textTime"><span class="messTime">'+data[i].mess_time+'</span></div><p class="senderText">'+data[i].mess_txt+'</p></span>';
	              	        chatBody.insertAdjacentHTML("beforeend",mess);
		              	    
		              	 }
		              	 messs = '<span class="mess toMess"><div class="textTime"><span class="messTime">'+data[i].mess_time+'</span></div><p class="senderText">'+data[i].mess_txt+'</p></span>';
	              	     chatBody.insertAdjacentHTML("beforeend",messs);
	              	}*/
	              	result = data;
	              	console.log(result);
	              });

              }


	      })

1 个答案:

答案 0 :(得分:1)

您的错误是每次单击时都要添加新的套接字侦听器。

您需要将套接字侦听器移到Click侦听器之外:

d.addEventListener("click",(e)=>{

};

socket.on("get_ret_messages",(data)=>{}