2014-10-08 34 views
13

Vì vậy, cuối cùng tôi đã quyết định cung cấp cho Node.js một ảnh. Tôi quyết định đi với một ứng dụng trò chuyện nhỏ để phá băng. Hướng dẫn tôi đang theo dõi trực tiếp từ trang web socket.io.Hướng dẫn trò chuyện Socket.io không hoạt động đúng cách

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

tôi sau lời hướng dẫn cho văn bản và thậm chí còn cố gắng sao chép và dán mã vào nguồn và đang nhận được không có nơi khi tôi gõ văn bản và gửi đi. Nó được cho là sắp tới trong dấu nhắc lệnh của tôi, tuy nhiên nó không phải là.

Tôi đã có người dùng kết nối và người dùng bị ngắt kết nối thư xuất hiện nhưng tôi stumped ngày này như tôi đã làm theo hướng dẫn từng bước.

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> 

Tôi giả sử tôi phạm lỗi cho một số nơi nhưng tôi không nhìn thấy nó, mặc dù tôi đã cố gắng và sao chép và dán nó. Ngoài ra, nếu nó quan trọng tôi đang sử dụng Windows 8.1 và Chrome. Tôi đã kiểm tra và không tìm thấy câu trả lời cho vấn đề này. Bất kỳ sự trợ giúp nào đều sẽ là tuyệt vời.

CHỈNH SỬA: Vấn đề là với jQuery, vì một số lý do nó không phản hồi như nó cần. Sau khi viết lại kịch bản trong vani nó hoạt động như dự định.

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

Bạn có thể cung cấp bất kỳ đầu ra giao diện điều khiển máy chủ và máy khách nào không? – jmar777

+0

Không có lỗi nào ở hai bên. Đó là những gì Im tìm thấy bực bội. –

Trả lời

14

Bạn có thể kích hoạt khai thác gỗ cho Socket.IO trong Chrome bằng cách gõ vào giao diện điều khiển của bạn:

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

và trên phía máy chủ:

DEBUG=* node yourfile.js 

Ngoài ra, bạn muốn kịch bản được thực hiện khi tài liệu đã sẵn sàng, để sử dụng jQuery, do đó bạn cần phải trì hoãn nó một chút:

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

Tôi chỉ nhận được "socket.io-client: socket vận chuyển đang mở - kết nối + 0ms". Không có gì khác. Tất cả điều này đang chạy trên localhost. –

+0

còn phía máy chủ thì sao? – xShirase

+0

"break in index.js: 1" –

6

Một chút sau khi thực tế, nhưng tôi đã có cùng một vấn đề và gắn nó lại với một vấn đề trật tự tải. Chỉ cần di chuyển mã có liên kết với biểu mẫu ở cuối số <body> thay vì ở <head>. Đó là một chút sai lầm khi một số mã trước đó trong hướng dẫn được trực tiếp trong <head>.

Các vấn đề liên quan