2017-08-30 6 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]); 
      } 
     }); 

これは、私がチャットと呼ばれる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

関連する問題