简体   繁体   English

socket.io并从mongodb获取数据

[英]socket.io and getting data from mongodb

I'm coding a simple messaging app and I have most of it working. 我正在编写一个简单的消息传递应用程序,并且大部分都可以运行。 I'm currently trying to retrieve the old messages that saved into my database and have it show up in my app. 我目前正在尝试检索保存到数据库中的旧消息,并将其显示在我的应用程序中。

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 just the javascript messages.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>

This line of code is supposed to retrieve from the server and display the old message but it is not working: 该行代码应从服务器检索并显示旧消息,但不起作用:

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

This is the part of the code that gave me trouble as I'm getting the API which is called Chat and trying to send to my user side. 这是代码的一部分,在获取名为Chat的API并尝试发送到用户端时,这给我带来麻烦。 However, in my console log from the server side code, it does saying sending old messages so I'm guessing it working correctly even though not sure. 但是,在服务器端代码的控制台日志中,它确实说发送旧消息,因此即使不确定,我也认为它可以正常工作。 This has been giving me trouble for so long and I need help. 长期以来一直给我带来麻烦,我需要帮助。

I think you have a mismatch on events here: 我认为您在这里发生的事件不匹配:

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

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

It should be: 它应该是:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM