0

我从 node.js 开始,在我的第一个示例中,我正在创建一个聊天。这个字符有两个页面,第一个(index.jade)用户插入您的昵称,第二个页面(chat.jade)用户可以与其他用户聊天。

我有两个问题。

第一个:当用户插入您的姓名时,系统会更改页面(chat.jade)并返回您写的姓名但代码(io.sockets.emit('nicknames',nicknames);)没有执行,我认为这是因为当页面更改时没有加载 de funcion en el client (socket.on('nicknames',function(data){ .....) 。为什么??

第二个问题:当用户发送消息时,服务器发送一个带有用户和消息的json,但客户端得到用户为空并且消息正确。为什么用户为空??

代码:

index.jade

$('#form-login').submit(function(){
        var nickname = $('#nickname').val();
        if(nickname !== ''){
            socket.emit('login',nickname, function(data){
                if(!data){
                    return false;
                }
            });
        }
    });

chat.jade
$('#btnSendMessage').on('click',function(){
  var message = $("#message").val();
  if(message != ''){
    socket.emit('sendMessage',message);
    $('#message').val('');
    $('#message').focus();
  }
});

socket.on('nicknames',function(data){
  var $p = $('<p>'+data+'</p>');
  $('.users').append($p);
});

//app.js
var nicknames = [];

io.sockets.on('connection', function(socket) {

    socket.on('login', function(data, callback){
        if (nicknames.indexOf(data) != -1){
            callback(false);
        }else{
            callback(true);
            nicknames.push(data);
            socket.set('nickname', data);
                        io.sockets.emit('nicknames', nicknames);
        }
    });

    socket.on('sendMessage', function(data){
        socket.get('nickname', function(err, name){
            console.log('nickname: '+name);
        });

        var message = { "nickname":socket.nickname, "data":data };
        io.sockets.emit('userMessage', message);
    });
});
4

1 回答 1

0
  1. 提交表单会离开此页面,从而关闭与服务器的套接字连接。

  2. 由于上述情况,当客户端到达您的 时chat.jade,它会建立新的套接字连接,该连接没有socket.nickname设置 - 您也应该使用socket.get('nickname')- 这是一个异步函数。

看看我使用 socket.io 和 agular实现的聊天

使用会话将套接字连接绑定到用户会话,链接

使用AngularJs或类似框架构建单页应用程序,防止刷新和失去连接

于 2013-09-11T14:10:29.013 回答