Javascript Node.js socket.io为单个事件返回多个值

Javascript Node.js socket.io为单个事件返回多个值,javascript,node.js,sockets,express,socket.io,Javascript,Node.js,Sockets,Express,Socket.io,我正在尝试使用Node、Express(^4.15.3)和socket.io(^2.0.3)构建一个简单的应用程序。我正在开发一个简单的聊天应用程序,但是每次我添加一条新消息时,每次都会得到额外的响应 例如,如果第一条消息是“Hello”,我将返回: 你好 如果我随后添加一条消息“有人在吗?”,我会返回: 有人在吗 有人在吗 等等…每次我都会收到额外的回复 这是我的代码-感觉这是非常明显的事情,我可能已经盯着它太久了 //app.js var express = requir

我正在尝试使用Node、Express(^4.15.3)和socket.io(^2.0.3)构建一个简单的应用程序。我正在开发一个简单的聊天应用程序,但是每次我添加一条新消息时,每次都会得到额外的响应

例如,如果第一条消息是“Hello”,我将返回:

  • 你好
  • 如果我随后添加一条消息“有人在吗?”,我会返回:

  • 有人在吗
  • 有人在吗
  • 等等…每次我都会收到额外的回复

    这是我的代码-感觉这是非常明显的事情,我可能已经盯着它太久了

    //app.js
    
    var express          = require("express");
    var bodyParser       = require("body-parser");
    var expressValidator = require('express-validator');
    var session          = require('express-session');
    var passport         = require("passport");
    var app              = express();
    var http             = require('http');
    var server           = http.createServer(app);
    var io               = require('socket.io').listen(server);
    
    app.use(express.static("public"));
    app.set("view engine", "ejs");
    
    server.listen(process.env.PORT || 3000, process.env.IP, function(){
        console.log("Server starting...");
    });
    
    app.get('/testsocket', function(req, res){
       res.render('sockets/test');
    });
    
    io.sockets.on('connection', function(socket){
        console.log('Connected')
        socket.on('send message', function(data){
            console.log('Got the message...');
            io.sockets.emit('new message', data) 
        });
    });
    
    然后是客户端

    //client side
    $(function() {
      var socket = io.connect();
      var $messageForm = $('#send-message');
      var $messageBox = $('#message');
      var $chat = $('#chat');
    
      $messageForm.submit(function(e){
        e.preventDefault();
    
        socket.emit('send message', $messageBox.val());
        $messageBox.val('');
    
        socket.on('new message', function(data){
          $chat.append(data + "<br>");
        });
      });
    });
    
    //客户端
    $(函数(){
    var socket=io.connect();
    var$messageForm=$(“#发送消息”);
    var$messageBox=$(“#message”);
    var$chat=$(“#chat”);
    $messageForm.submit(函数(e){
    e、 预防默认值();
    emit('send message',$messageBox.val());
    $messageBox.val(“”);
    socket.on('new message',函数(数据){
    $chat.append(数据+“
    ”); }); }); });
    我认为问题在于您正在提交函数中注册新消息的侦听器。因此,每次提交表单时,除了以前的侦听器之外,还需要注册一个新的侦听器。尝试将
    socket.on('newmessage'),…
    部分置于
    submit
    处理程序之外