gpt4 book ai didi

node.js - 为什么我的代码每次运行我的 node.js 应用程序时都会打印不合逻辑的模式?

转载 作者:可可西里 更新时间:2023-11-01 11:39:09 26 4
gpt4 key购买 nike

我正在使用 node.js、redis、socket.io 创建一个发布-订阅应用程序。

对于我的服务器端,这是我的 app.js 代码:

var express = require('express');
var app = express();
var redis = require('redis');
var http = require('http').Server(app);
var io = require('socket.io')(http);
var fs = require('fs');

app.use(express.static(__dirname + '/public'));
var port = process.env.PORT || 8000;

var sub = redis.createClient();
var pub = redis.createClient();

io.on('connection', function(socket){
socket.on('subscribe', function(channel){
sub.subscribe(channel);
console.log("Successfully subscribed");
});
socket.on('publish', function(msg, channel){
pub.publish(channel, msg);
if(pub.publish(channel, msg)){
socket.emit('message', msg);
}
else{
socket.emit('message', "The channel doesn't exist!");
}
})
})

http.listen(port, function(){
console.log('listening on port ' + port);
});

对于前端的 index.js,我使用 jquery 获取 html 元素并使用 socket.io 与服务器通信:

$(function(){
$("#sub-btn").click(function(){
var socket = new io.connect('http://localhost');
var channelName = $("#channel").val();
var content = $('#content');
socket.emit('subscribe', channelName);
})
$("#pub-btn").click(function(){
var socket = new io.connect('http://localhost');
var msg = $("#published_message").val();
var channelName = $("#channel").val();
var content = $('#content');
socket.emit('publish', msg, channelName);
socket.on('message', function(msg){
content.append(msg);
})
})
})

当我运行我的 Node 应用程序时,这是我得到的:

How it looks before entering anything

在我第一次插入一些输入后,例如:

it works correctly

在我插入一些其他输入之后:

It starts printing multiple times.

我不知道为什么会出现这个错误。

最佳答案

您正在将新消息附加到以前的消息中。这就是错误发生的地方!

var content = $('#content');
socket.emit('publish', msg, channelName);
socket.on('message', function(msg){
content.append(msg);
});

此处当新消息到达时,它附加到先前的消息并导致问题。

关于node.js - 为什么我的代码每次运行我的 node.js 应用程序时都会打印不合逻辑的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26937677/

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