我是socket.io世界的新手,我正在尝试一个简单的程序,如下所示
服务器端
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function(socket){
console.log('socket listening.');
socket.on('chat_message', function(msg){
console.log('message: ' + msg);
});
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
客户端代码段
<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>
<body>
<ul id="messages"></ul>
<form action="">
<input id="m" autocomplete="off" /><input type="submit" id="submit" name="submit">Send</input>
</form>
</body>
所以在这里我看不到消息被打印出来。有人能帮助我理解同样的原因吗?
作为尝试,我在服务器端也做了以下事情。
io.on('chat_message', function(msg){
console.log('message: ' + msg);
});
仍然没有用。
我尝试参考下面的链接,但无法理解相同的原因。
答案 0 :(得分:0)
脚本标记应位于<head>
或<body>
元素中;你的不在里面。所以首先将它们移到body标签的末尾,以确保在运行脚本之前加载DOM。
您的第一个输入没有任何类型。添加type="text"
以便您可以检索其值。
您已关闭第二个输入标记。 <input>
标记是自动关闭的。无需关闭。 (您可以通过value
属性设置值:value="Send"
<!DOCTYPE html>
<html>
<head>
<title>socket.io</title>
</head>
<body>
<ul id="messages"></ul>
<form>
<input type="text" id="m" autocomplete="off">
<input type="submit" id="submit" name="submit" value="Send">
</form>
<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>
</body>
</html>