gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:59:04 25 4
gpt4 key购买 nike

我正在尝试使用 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>");
});
});
});

最佳答案

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

关于javascript - Node.js socket.io 为单个事件返回多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46819575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com