Socket.io无法在控制台中记录聊天消息

时间:2015-06-13 20:03:18

标签: node.js sockets websocket socket.io

我正在浏览Socket.io tutorial on creating a chat room,但我无法让我的应用将聊天消息记录到控制台。

当用户连接&断开连接,但是在传递消息时没有记录。

有什么想法吗?

index.html页面的相关部分:

<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" /><button>Send</button>
  </form>
</body>

我的index.js文件:

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

app.use(express.static('public'));

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


io.on('connection', function(socket){
  console.log('a user connected');

  socket.on('disconnect', function(){
    console.log('user disconnected');
  });

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

1 个答案:

答案 0 :(得分:0)

我已经开始工作了!

解决方案的步骤: - 将脚本标记与事件侦听器分离为单独的JS文件 - 将JS文件包含在脚本标记最初所在的位置 - 文档准备好后加载chatListener

我的文件现在看起来像这样,一切都很美妙:

<强>的index.html:

<script src="/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>

<script src="main.js"></script>

<body>
  <ul id="messages"><ul>

  <form action="">
    <input class="chat" id="m" autocomplete="off" />
    <input class="btn" type="submit" value="Send" />
  </form>
</body>

index.js:没有变化

<强> main.js:

var socket = io();

var chatListener = function() {
  $('form').submit(function() {
    socket.emit('chat message', $('#m').val());
    $('#m').val('');
    return false;
  });
}

$(document).ready(function() {
  chatListener();
})

最后,我认为这是初学者的JS错误;我正在页面顶部加载脚本(如教程建议的那样),并且表单上的事件监听器从未注册过。