Javascript Node.js socket.io为单个事件返回多个值
我正在尝试使用Node、Express(^4.15.3)和socket.io(^2.0.3)构建一个简单的应用程序。我正在开发一个简单的聊天应用程序,但是每次我添加一条新消息时,每次都会得到额外的响应 例如,如果第一条消息是“Hello”,我将返回: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
//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
处理程序之外