首页 文章

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

提问于
浏览
1

我正在浏览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

    我已经开始工作了!

    解决方案的步骤: - 将脚本标记与事件监听器分离到一个单独的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错误;我正在页面顶部加载脚本(如教程建议的那样),并且表单上的事件监听器从未注册过 .

相关问题