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

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

例如,如果第一条消息是“你好”,我会返回:

  1. 你好

如果我接着添加“有人在那里?”的后续消息,我回头:

  1. 有人在吗?
  2. 有人在吗?

等等…每次我得到一个额外的回应。

这是我的代码 – 感觉这是一些非常明显的事情,我可能一直在盯着它太久…

//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>"); }); }); }); 

我认为问题在于你在提交函数中注册了new message的侦听器。 所以每次提交表单时,都会注册一个新的侦听器,除了之前的任何侦听器。 尝试把submit处理程序之外的socket.on('new message', ...部分。