2016-09-22 2 views
0

Я пытался реализовать сервер чата в node.js, используя socket.io, как указано на веб-сайте socket.io. Кажется, что все работает нормально, за исключением того, что сообщения не добавляются в список, который я сделал в HTML-коде клиента. Может ли кто-нибудь сказать мне, что я делаю неправильно?Чат-сервер с использованием socket.io, сообщение не добавляется к списку

код сервера

var express = require('express'); 
var soc = require('socket.io') 
var http = require('http'); 
var ip = require('ip'); 

var app = express(); 
var server = http.createServer(app).listen(3000); 
var io = soc(server); 

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

io.on('connection', function(socket) { 
    var address = socket.handshake.address; 
    var pos = address.indexOf('1'); 
    var len = address.length; 
    address = address.slice(-1 * (len - pos)); 
    /*if(address[0] === ':') { 
     address = ip.address(); 
    }*/ 
    console.log(address + ' connected'); 
    socket.on('disconnect', function() { 
     console.log(address + ' disconnected'); 
    }); 
    socket.on('message', function(message) { 
     io.emit('update', message); 
    }); 
}); 

код клиента

<html> 
<head></head> 
<body> 
    <form id="form" action="" style="position: absolute; bottom: 0; width: 100%;"> 
     Chat: <input style="width: 90%;" type="text" name="chat"> 
     <input type="submit" style="margin: 2px 50%"> 
    </form> 
    <ul id="myList"></ul> 
<script src="/socket.io/socket.io.js"></script> 
<script> 
    var myList = document.getElementById('myList'); 
    var socket = io(); 
    var form = document.getElementById("form"); 
    form.addEventListener("submit", function() { 
     socket.emit('message', form.chat.value); 
    }); 
    socket.on('update', function(msg) { 
     var node = document.createElement('li'); 
     var textnode = document.createTextNode(msg); 
     node.appendChild(textnode); 
     document.getElementById('myList').appendChild(node); 
    }); 
</script> 
</body> 

+0

ли перезапуск сервера узла, проходя через примеры? Получаете ли вы данные в обратном вызове обновления? –

+0

Да, поскольку я использую nodemon ... Да, я получаю данные в обратном вызове обновления. @JeremyJackson –

+0

В обратном вызове обновления я выбрал другое событие и отправил сообщение на консоль сервера, чтобы проверить, не принимает ли im сообщение, и да, я его получаю, все еще добавление не происходит. @JeremyJackson –

ответ

1

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

Попробуйте вызвать preventDefault() на Thats событий, переданном в обработчике представить в chat.html:

form.addEventListener("submit", function(event) { 
    event.preventDefault(); 
    socket.emit('message', form.chat.value); 
}); 
Смежные вопросы