2014-11-14 1 views
0

Я создаю приложение pub-sub, используя node.js, redis, socket.io.Почему мой код печатает нелогичные шаблоны каждый раз, когда я запускаю приложение node.js?

Для стороны моего сервера это код, у меня есть для 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); 
    }) 
}) 
}) 

Когда я запускаю мое приложение узла это то, что я получаю:

How it looks before entering anything

После того как я вставить некоторый вход в первый раз, скажем, к примеру:

it works correctly

После того как я вставить какой-то другой вход:

It starts printing multiple times.

Я не могу сказать, почему эта ошибка является происходит.

ответ

0

Вы добавляете новое сообщение в предыдущие сообщения. это ошибка!

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

здесь, когда приходит новое сообщение, оно добавляется к предыдущим сообщениям и вызывает проблему.

+1

Это пограничный ответ низкого качества. Я не буду голосовать, чтобы удалить, но было бы очень хорошо, если бы вы добавили еще больше контента в свой пост. – gunr2171

+0

Спасибо за ваше упоминание. Я думал, что это достаточно ясно, но ты прав. –

+0

@MohammadRahchamani это не проблема. даже если я попробую console.log (msg), он все еще делает это несколько раз – Ralph

Смежные вопросы