【问题标题】:different page with chat node.js带有聊天 node.js 的不同页面
【发布时间】:2013-09-11 14:03:13
【问题描述】:

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

我有两个问题。

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

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

代码:

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);
    });
});

【问题讨论】:

    标签: node.js chat


    【解决方案1】:
    1. 提交表单会离开此页面,从而关闭与服务器的套接字连接。

    2. 1234563 .

    看看my implementation of chat使用socket.io和agular

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

    使用AngularJs或类似框架搭建单页App,防止刷新,掉线

    【讨论】:

    • 我明白了。有什么办法可以在不同的页面中保持相同的套接字??
    • @AgustinCastro,一种方法是构建一个单页应用程序,就像我给你的例子一样,在视图之间导航实际上不会刷新页面,从而保持套接字连接。另一种方法是使用会话,并将所有数据保存在会话中 - 并使用套接字作为客户端和服务器之间的传输方式。
    • 我会尝试这两种方法。 1.如果我想在不刷新页面的情况下更改视图,使用ajax?? 2.你能给我一个解释如何使用socket的页面吗??
    猜你喜欢
    • 1970-01-01
    • 2013-10-11
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 2014-02-20
    相关资源
    最近更新 更多