我正在学习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时,它不会在控制台中打印消息,也不会附加任何文本。
我错了什么?
答案 0 :(得分:2)
我看不出你所展示的代码有什么问题,但这里有一些我能想到的东西:
http
Server实例与socket.io链接?var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
然后使用链接服务器?
server.listen(port, () => {
});
socket.io
并在页面加载后连接到服务器?<script>
// < -- is there code here that does var socket = io('{server url}';
$('.userlist').click(function(){
socket.emit('private','test');
});
// 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);
});
});