2017-08-29 45 views
0
<body> 
<ul id="messages"></ul> 
<form action=""> 
    <input id="m" autocomplete="off" /><button onclick="message()">Send</button> 
</form> 
<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io(); 

    var message = function(){ 
     var msg = document.getElementById("m").value; 
     if(msg !== ""){ 
     alert(msg); 
     socket.emit('chat message',msg); 
     } 
     document.getElementById("m").value=""; 
    } 

    socket.on('display',function(value){ 
     console.log(value); 
     document.getElementById("messages").innerHTML += "<li>"+value+"</li>"; 
    }) 

</script> 

Socket.io得到意外

斷開。這是我的index.html頁面使用socket.io

var express = require('express'); 
var app = express(); 
var http = require('http').createServer(app); 
var io = require('socket.io')(http); 
app.get('/', function(request, response) { 
    response.sendFile(__dirname + '/index.html'); 
}); 
io.on('connection',function(socket){ 
    console.log('a user connected'); 
    socket.on('chat message',function(msg){ 
     console.log('message: '+msg); 
     io.emit('display',msg); 
    }); 
    socket.on('disconnect',function(){ 
     console.log('user disconnected') 
    }) 
}); 

http.listen(3000, function() { 
    console.log("listening on 3000"); 
}); 

這是我index.js文件設計一個羣聊。每次發送消息時,用戶都會斷開連接。任何建議,爲什麼會這樣提前

感謝

+0

它會拋出任何錯誤嗎? – Subburaj

+0

沒有錯誤。用戶在發送的每條消息上斷開連接 –

回答

1

添加message(event)到您的窗體:

<form action=""> 
    <input id="m" autocomplete="off" /><button onclick="message(event)">Send</button> 
</form> 

和更改郵件功能:

var message = function(event){ 
    event.preventDefault(); 
    var msg = document.getElementById("m").value; 
    if(msg !== ""){ 
     alert(msg); 
     socket.emit('chat message',msg); 
    } 
    document.getElementById("m").value=""; 
} 

默認的HTML方法,當你提交表單是GET。當express收到GET時,它會向瀏覽器重新發送index.html並刷新頁面。我們可以用event.preventDefault()來改變它。它現在應該工作。

+0

與JS完美協同工作。但是,當使用角度,我有同樣的問題 –

+0

你可以問一個新的問題,並告訴我們你的角碼 – mk12ok

0

你不應該這樣做:

io.emit 

你應該這樣做:

socket.emit 
+0

仍然不工作 –

相關問題