2014-10-08 13 views
13

W końcu zdecydowałem się dać Node.js strzał. Postanowiłem wybrać małą aplikację do czatu, aby przełamać lody. Samouczek, który obserwuję, jest bezpośrednio z witryny socket.io.Samouczek na czacie Socket.io nie działa prawidłowo

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

mam samouczka słowo po słowie, a nawet próbowali skopiować i wkleić kod do źródła i otrzymuję nie ma gdzie, kiedy wpisać tekst i wysłać go. Powinien pojawić się w wierszu polecenia, ale tak nie jest.

Miałem podłączony użytkownik i komunikaty rozłączone przez użytkownika, ale jestem na nie zakłopotany, ponieważ postępowałem krok po kroku w tutorialu.

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> 

jestem przy założeniu, że sfaulował się niektóre gdzie ale nie widząc go, chociaż nie spróbować skopiować i wkleić. Ponadto, jeśli ma to znaczenie, używam Windows 8.1 i Chrome. Sprawdziłem i również nie znajduję odpowiedzi na ten problem. Każda pomoc byłaby świetna.

EDYCJA: Problem dotyczył jQuery, z jakiegoś powodu nie odpowiada tak, jak powinien. Po przepisaniu skryptu w wanilii działa zgodnie z przeznaczeniem.

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

Czy możesz podać dowolny serwer i dane wyjściowe konsoli po stronie klienta? – jmar777

+0

Brak błędów po obu stronach. To jest dla mnie frustrujące. –

Odpowiedz

14

Można włączyć rejestrowanie dla Socket.IO w Chrome, wpisując w konsoli:

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

i na po stronie serwera:

DEBUG=* node yourfile.js 

Również skrypt ma być wykonywany, gdy dokument jest gotowy, aby korzystać z jQuery, więc trzeba go opóźnić trochę:

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

Otrzymuję tylko "socket.io-client: transport gniazda jest otwarty - połączenie + 0ms". Nic więcej. Wszystko to działa na localhost. –

+0

co ze stroną serwera? – xShirase

+0

"break in index.js: 1" –

6

Trochę po fakcie, ale miałem ten sam problem i przywiązał go do problemu z ładowaniem. Po prostu przenieś kod, który jest powiązany z formularzem, na spód <body>, a nie na <head>. To trochę mylące, ponieważ niektóre z wcześniejszych kodów w samouczku były bezpośrednio w <head>.

Powiązane problemy