与chat node.js不同的页面

与chat node.js不同的页面,node.js,chat,Node.js,Chat,我从node.js开始,在我的第一个示例中,我创建了一个聊天室。这个字符有两个页面,第一个页面(index.jade)用户插入您的昵称,第二个页面(chat.jade)用户可以与其他用户聊天 我有两个问题 第一:当用户插入你的名字时,系统会更改页面(chat.jade)并返回你写的名字,但是代码(io.sockets.emit('昵称',昵称);)不会执行,我想这是因为当页面更改时,没有加载客户端的功能(socket.on('昵称',函数(数据){…)。为什么 第二个问题: 当用户发送消息时,服

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

我有两个问题

第一:当用户插入你的名字时,系统会更改页面(chat.jade)并返回你写的名字,但是代码(io.sockets.emit('昵称',昵称);)不会执行,我想这是因为当页面更改时,没有加载客户端的功能(socket.on('昵称',函数(数据){…)。为什么

第二个问题: 当用户发送消息时,服务器发送一个包含用户和消息的json,但客户端得到的用户为null,消息正确。为什么用户为null

代码:

index.jade
$('#表单登录')。提交(函数(){
变量昵称=$('#昵称').val();
如果(昵称!=''){
socket.emit('login',昵称,函数(数据){
如果(!数据){
返回false;
}
});
}
});
杰德先生
$('btnSendMessage')。在('click',function()上{
var message=$(“#message”).val();
如果(消息!=''){
发出('sendMessage',message);
$('#message').val('');
$(“#消息”).focus();
}
});
socket.on('昵称',函数(数据){
var$p=$(''+data+'

'); $('.users')。追加($p); }); //app.js var昵称=[]; io.sockets.on('connection',函数(socket){ socket.on('login',函数(数据,回调){ if(昵称.indexOf(数据)!=-1){ 回调(假); }否则{ 回调(true); 昵称。推送(数据); socket.set('昵称',数据); io.sockets.emit('昵称',昵称); } }); socket.on('sendMessage',函数(数据){ socket.get('昵称',函数(err,name){ console.log('昵称:'+名称); }); var message={“昵称”:socket.nickname,“数据”:data}; io.sockets.emit('userMessage',message); }); });
  • 提交表单会离开此页面,从而关闭与服务器的套接字连接

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

  • 看看如何使用socket.io和agular

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


    使用或类似的框架构建单页应用程序,以防止刷新和断开连接

    我理解。有没有办法在不同的页面中保持相同的套接字???@AgustinCastro,一种方法是构建单页应用程序,就像我给你的示例一样,在视图之间导航实际上不会刷新页面,从而保持e套接字连接。另一种方法是使用会话,并将所有数据保留在会话中,并将套接字用作客户端和服务器之间的传输手段。我将尝试这两种方法。1.如果我想更改视图而不刷新页面,请使用ajax?2。你能给我一个页面,说明如何使用套接字会话吗??
    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);
        });
    });