node.js 애플리케이션을 실행할 때마다 코드가 비논리적 패턴을 인쇄하는 이유는 무엇입니까?

랄프

node.js, redis, socket.io를 사용하여 pub-sub 응용 프로그램을 만들고 있습니다.

내 서버 측의 경우 이것은 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);
  });

여기에서 새 메시지가 도착하면 이전 메시지에 추가되어 문제가 발생합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관