2017-08-30 80 views
0

我正在编写一个简单的消息应用程序,我大部分工作。我目前正试图检索保存到我的数据库中的旧邮件,并将其显示在我的应用中。socket.io和从mongodb获取数据

server.js 

io.sockets.on('connection', function(socket) { 
    Chat.find({}, function(err, docs) { 
     if(err) throw err; 
     console.log('sending previous messages'); 
     socket.emit("load old messages", docs); 
    }); 

    socket.on('new user', function(data, callback){ 
     if (data in users){ 
      callback(false); 
     } else{ 
      callback(true); 
      socket.nickname = data; 
      users[socket.nickname] = socket; 
      updateNicknames(); 
     } 
    }); 

的messaging.html 只是JavaScript的

<script> 
    jQuery(function($){ 
     var socket = io.connect(); 
     var $nickForm = $('#setNick'); 
     var $nickError = $('#nickError'); 
     var $nickBox = $('#nickname'); 
     var $users = $('#users'); 
     var $messageForm = $('#send-message'); 
     var $messageBox = $('#message'); 
     var $chat = $('#chat'); 

     $nickForm.submit(function(e){ 
      e.preventDefault(); 
      socket.emit('new user', $nickBox.val(), function(data){ 
       if(data){ 
        $('#nickWrap').hide(); 
        $('#contentWrap').show(); 
       } else{ 
        $nickError.html('That username is already taken! Try again.'); 
       } 
      }); 
      $nickBox.val(''); 
     }); 

     socket.on('usernames', function(data){ 
      var html = ''; 
      for(var i=0; i < data.length; i++){ 
       html += data[i] + '<br/>' 
      } 
      $users.html(html); 
     }); 

     $messageForm.submit(function(e){ 
      e.preventDefault(); 
      socket.emit('send message', $messageBox.val(), function(data){ 
       $chat.append('<span class="error">' + data + "</span><br/>"); 
      }); 
      $messageBox.val(''); 
     }); 

     socket.on('load old msgs', function(docs) { 
      for (var i=0; i < docs.length; i++) { 
       displayMsg(docs[i]); 
      } 
     }); 

     socket.on('new message', function(data){ 
      displayMsg(data); 

     }); 

     function displayMsg (data) { 
      $chat.append('<span class="msg"><b>' + data.nick + ': </b>' + data.msg + "</span><br/>"); 
     } 

     socket.on('whisper', function(data){ 
      $chat.append('<span class="whisper"><b>' + data.nick + ': </b>' + data.msg + "</span><br/>"); 
     }); 
    }); 
</script> 

这行代码是应该从服务器中检索和显示旧消息,但它不工作:

socket.on('load old msgs', function(docs) { 
      for (var i=0; i < docs.length; i++) { 
       displayMsg(docs[i]); 
      } 
     }); 

这是代码的一部分,当我得到名为Chat的API并尝试发送给我的用户端时,给我带来麻烦。但是,在我从服务器端代码的控制台日志中,它确实表示发送旧消息,所以我猜测它即使不确定也能正常工作。这一直给我带来麻烦,我需要帮助。

+0

具有u检查'docs.length',我认为这是不来 – Amogh

回答

1

我觉得你在这里对事件进行了不匹配:

socket.emit("load old messages", docs); 

socket.on('load old msgs', function(docs) { 
      for (var i=0; i < docs.length; i++) { 
       displayMsg(docs[i]); 
      } 
}); 

它应该是:

socket.on('load old messages', function(docs) { 
      for (var i=0; i < docs.length; i++) { 
       displayMsg(docs[i]); 
      } 
}); 
+0

我是如此爱你现在很多。这是问题所在,我正在关注如何进行聊天的YouTube视频。我没有注意到这么长时间。谢谢。 –

+0

np,这是那些在玩插座时会抓到你的小东西。 – jmcgui05