2014-10-08 1 views
13

Così ho finalmente deciso di dare un colpo a Node.js. Ho deciso di andare con una piccola app di chat per rompere il ghiaccio. Il tutorial che sto seguendo è direttamente dal sito socket.io.Socket.io Chat Tutorial non funziona correttamente

http://socket.io/get-started/chat/

sto seguendo la parola tutorial per parola e ho nemmeno cercato di copiare e incollare il codice nel sorgente e sto ottenendo nessun dove quando si digita nel testo e inviarlo. Dovrebbe comparire nel mio prompt dei comandi, tuttavia non lo è.

Ho avuto l'utente connesso e i messaggi di utente disconnesso compaiono ma io sono stumped su questo come ho seguito il tutorial passo dopo passo.

Index.js

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

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

io.on('connection', function(socket){ 
    socket.on('chat message', function(msg){ 
     console.log('message: ' + msg); 
    }); 
}); 

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

Index.HTML:

<!DOCTYPE html> 
<html> 
<head lang="en"> 
    <meta charset="UTF-8"> 
    <title>Chat</title> 

    <script src="/socket.io/socket.io.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()); 
      $('#m').val(''); 
      return false; 
     }); 
    </script> 

    <style> 
     * { margin: 0; padding: 0; box-sizing: border-box; } 
     body { font: 13px Helvetica, Arial; } 
     form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; } 
     form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; } 
     form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; } 
     #messages { list-style-type: none; margin: 0; padding: 0; } 
     #messages li { padding: 5px 10px; } 
     #messages li:nth-child(odd) { background: #eee; } 
    </style> 
</head> 
<body> 

    <ul id="messages"></ul> 

    <form action=""> 
     <input id="m" autocomplete="off" /><button>Send</button> 
    </form> 

</body> 
</html> 

Io parto dal presupposto che subito il fallo un po 'dove, ma non sto vedendo, anche se ho provato e copiare e incollare. Inoltre, se è importante sto usando Windows 8.1 e Chrome. Ho controllato e non ho trovato risposta a questo problema. Qualsiasi aiuto sarebbe grande.

MODIFICA: il problema era con jQuery, per qualche motivo non risponde come dovrebbe. Dopo aver riscritto lo script in vanilla, funziona come previsto.

Index.js - JavaScript

<script> 
    var socket = io(); 

    function sendMessage() { 
     var msg = document.getElementById('m'); 

     socket.emit('message', msg.value); 
     msg.value = ''; 
     return false; 
    } 
</script> 

HTML:

<form action="" onsubmit="javascript:sendMessage();"> 
     <input id="m" autocomplete="off" /><button>Send</button> 
</form> 
+0

È possibile fornire qualsiasi output di console server e lato client? – jmar777

+0

Nessun errore su entrambi i lati. Questo è quello che sto trovando frustrante. –

risposta

14

È possibile attivare la registrazione per Socket.IO in Chrome digitando la console:

localStorage.debug = "socket.io-client:socket" 

e lato server:

DEBUG=* node yourfile.js 

Inoltre, si vuole lo script da eseguire quando il documento è pronto, al fine di utilizzare jQuery quindi è necessario ritardare un po ':

$(document).ready(function() { 
    var socket = io(); 
    $('form').submit(function(){ 
     socket.emit('chat message', $('#m').val()); 
     $('#m').val(''); 
     return false; 
    }); 
}); 
+0

Ricevo solo "socket.io-client: il trasporto del socket è aperto - connessione + 0 ms". Nient'altro. Tutto questo è in esecuzione su localhost. –

+0

E il lato server? – xShirase

+0

"break in index.js: 1" –

6

Poco dopo il fatto, ma ho avuto la stesso problema e legato a un problema di ordine di caricamento. Basta spostare il codice che è vincolante per il modulo nella parte inferiore di <body> anziché in <head>. È un po 'fuorviante in quanto parte del codice precedente del tutorial era direttamente in <head>.