【问题标题】:Node.js socket.io returning multiple values for a single eventNode.js socket.io 为单个事件返回多个值
【发布时间】:2017-10-18 21:30:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript node.js sockets express socket.io


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多