簡體   English   中英

為什么我每次運行node.js應用程序時代碼打印不合邏輯的模式?

[英]Why is my code printing illogical patterns everytime I run my node.js application?

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

當我運行節點應用程序時,我得到的是:

輸入任何內容之前的外觀

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

它正常工作

在插入其他輸入后:

它開始多次打印。

我不知道為什么會發生這個錯誤。

您要將新消息追加到以前的消息。 這就是錯誤發生的地方!

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

在這里,當收到新消息時,它將追加到以前的消息中並導致問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM