click事件在节点js中不起作用

时间:2016-06-01 08:18:51

标签: node.js express socket.io

我正在学习nodejs + express + socket.io。我有一个用户列表列表,列表在客户端连接时自动追加。为了进行试验,我已经使用div元素检查了click事件。

客户端

<div class="userlist">
  <ul>
    ............... ...............
  </ul>
</div>

<script>
  $('.userlist').click(function() {
    socket.emit('private', 'test');
  });

  socket.on('private', function(mesg) {
    $('body').append($('<li class="listm">').text(mesg));
  });
</script>

服务器端

io.on('connection', function(socket){
    socket.on('private', function(mesg)
    {  
       console.log('private test message');
       io.socket.emit('private',mesg);
    }); 
});

但它不起作用。当我单击div时,它不会在控制台中打印消息,也不会附加任何文本。

我错了什么?

1 个答案:

答案 0 :(得分:2)

我看不出你所展示的代码有什么问题,但这里有一些我能想到的东西:

1。您是否记得将http Server实例与socket.io链接?

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

然后使用链接服务器?

server.listen(port, () => {

});

2。您是否在客户端上包含socket.io并在页面加载后连接到服务器?

<script>
// < -- is there code here that does var socket = io('{server url}';
$('.userlist').click(function(){        
  socket.emit('private','test');
});

3。如果是,您是否检查连接是否成功?

// Put this on the client and look at the console
socket.on('connect', () => {
  console.debug('Connection to server established');
});

另一件事,即使它可能只是问题中的拼写错误,在服务器上你需要使用从连接回调返回的socket,而不是io.socket

io.on('connection', function(socket){
    socket.on('private', function(mesg)
    {  
       console.log('private test message');
       socket.emit('private',mesg); // <----- Use this (without io.)
       // Not this: io.socket.emit('private',mesg); 
    }); 
});