2016-05-25 7 views
0

Я создаю приложение чата в node.js на основе учебника от socket.io. Цель состоит в том, чтобы пользователь вводил имя пользователя и сообщение. В чате появится «имя пользователя: сообщение». Текстовое поле имени пользователя исчезнет после первой записи. У меня все работает, за исключением чата, отображающего сообщение с именем пользователя. В чате отображаются четыре сообщения вместо одного, они говорят, что обе переменные не определены.Приложение для чата Node.js с переменными имени пользователя не работает

JS

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

app.get('/', function(req, res){ 
    res.sendFile(__dirname + '/index.html'); 
}); 

io.on('connection', function(socket){ 
    console.log('a user connected'); 
    socket.on('disconnect', function(){ 
    console.log('user disconnected'); 
    }); 
}); 

io.on('connection', function(socket){ 
    socket.on('chat message', function(msg, usn){ 
    io.emit('chat message', msg); 
    io.emit('chat message', usn); 
    }); 
}); 

http.listen(3000, function(){ 
    console.log('listening on *:3000'); 
}); 

HTML (без тегов стиля)

<!doctype html> 


<html> 


    <head> 

    <title>Lucas Chat</title> 



    </head> 



    <body> 

    <ul id="messages"></ul> 
    <form action=""> 
     <input id="u" autocomplete="off" placeholder="Nickname"/><input id="m" autocomplete="off" placeholder="Message"/><button>Send</button> 
    </form> 



     <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script> 
    <script src="http://code.jquery.com/jquery-1.11.1.js"></script> 
    <script> 
     var socket = io(); 
     $('form').submit(function(){ 
     socket.emit('chat message', $('#m').val()); 
     socket.emit('chat message', $('#u').val()); 
     $('#u').css("display", "none") 
     $('#m').css("width", "90%") 
     $('#m').val(''); 
     return false; 
     }); 
     socket.on('chat message', function(msg, usn){ 
     $('#messages').append($('<li>').text(usn + ": " + msg)); 
     }); 
    </script> 



    </body> 
</html> 

ответ

1

клиентской

var socket = io(); 
    $('form').submit(function(){ 
    socket.emit('send message', {msg:$('#m').val(),user:$('#u').val()}); 
    $('#u').css("display", "none") 
    $('#m').css("width", "90%") 
    $('#m').val(''); 
    return false; 
    }); 
    socket.on('receive message', function(msg){ 
    $('#messages').append($('<li>').text(msg)); 
    }); 

и серверный

io.on('connection', function(socket){ 
    socket.on('send message', function(data){ 
    io.emit('receive message',data.msg + ':' + data.user); 
    }); 
}); 
Смежные вопросы