我如何使用数组Socket.IO加载聊天记录

时间:2015-10-06 16:56:12

标签: javascript mysql sockets websocket socket.io

我在Socket.IO,MySQL,PHP上聊天。一切都运行良好,但我需要在更新页面时下载和显示消息历史记录。

php代码:

<script>var USER = {"id":"<?php echo $_SESSION['steamid']?>","login":"<?php echo $_SESSION['personaname']?>","image":"<?php echo $_SESSION['avatarmedium']?>","hash":"<?php echo md5($_SESSION['steamid']) ?>"};</script>

js网站代码:

var messageTpl = _.template($("#chat-message").html());

function sendMessage(text) {
    socket.emit('message', {user: USER, message: text});
}
var lastUser = null;
function addMessage(data, checkLast) {

    var a = $("#chatScroll")[0];
    var isScrollDown = (a.offsetHeight + a.scrollTop) == a.scrollHeight;

    if (checkLast && lastUser && lastUser.id == data.user.id) {
        $('.chatMessage').last().find('.body').append('<br/>' + _.escape(data.message))
    }
    else {
        console.log(data);
        data.user.url = 'http://steamcommunity.com/profiles/' + data.user.id;
        data.user.image = 'https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/' + _.escape(data.user.image).replace('_medium', '');
        var html = messageTpl(data);
        $('#messages').append(html);
        if ($('.chatMessage').length > 100) {
            $('.chatMessage').eq(0).remove();
        }
    }
    lastUser = data.user;

    if (isScrollDown) a.scrollTop = a.scrollHeight;
    $("#chatScroll").perfectScrollbar();
}
socket.on('online', function(data) {
    $('#online').text(data.online);
});
socket.on('chat-message', function(data) {
    addMessage(data, true);
});
socket.on('chat-history', _.once(function(data) {
    $("#chatScroll").perfectScrollbar();
    if (data) _.each(data, addMessage);
}));

函数addMessage效果很好,但是socket.on('chat-history')我遇到了错误 Uncaught TypeError: Cannot read property 'id' of undefined

js服务器代码:

    connection.query('SELECT * FROM cs_chat ORDER BY id DESC LIMIT 50', function(error, rows) {
        if(!error) {
            var user = [];
              rows.forEach(function (data) {
                  user.push(data);
                });
            console.log(user);
            socket.emit('chat-history', {user: JSON.stringify(user)});
        } else {
            console.log(error.message);
        }
    });

刷新页面时 - 所有上一条消息都丢失了 console.log服务器js rows.forEach下面。

  [{"id":668,"message_text":"3qwe","user_steamid":"76561198056267433","user_personaname":"@Saundefined","date":"2015-10-06T15:22:15.000Z","user_avatarmedium":"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/c2/c2ff9427410ea1121363de0e651f6d4e8c485ab6_medium.jpg"},{"id":667,"message_text":"12312","user_steamid":"76561198056267433","user_personaname":"@Saundefined","date":"2015-10-06T15:22:14.000Z","user_avatarmedium":"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/c2/c2ff9427410ea1121363de0e651f6d4e8c485ab6_medium.jpg"},{"id":666,"message_text":"213123","user_steamid":"76561198056267433","user_personaname":"@Saundefined","date":"2015-10-06T15:22:14.000Z","user_avatarmedium":"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/c2/c2ff9427410ea1121363de0e651f6d4e8c485ab6_medium.jpg"},{"id":665,"message_text":"cvb","user_steamid":"76561198056267433","user_personaname":"@Saundefined","date":"2015-10-06T15:22:12.000Z","user_avatarmedium":"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/c2/c2ff9427410ea1121363de0e651f6d4e8c485ab6_medium.jpg"},{"id":664,"message_text":"cvb","user_steamid":"76561198056267433","user_personaname":"@Saundefined","date":"2015-10-06T15:22:12.000Z","user_avatarmedium":"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/c2/c2ff9427410ea1121363de0e651f6d4e8c485ab6_medium.jpg"},{"id":663,"message_text":"g","user_steamid":"76561198056267433","user_personaname":"@Saundefined","date":"2015-10-06T15:22:12.000Z","user_avatarmedium":"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/c2/c2ff9427410ea1121363de0e651f6d4e8c485ab6_medium.jpg"},{"id":662,"message_text":"gdf","user_steamid":"76561198056267433","user_personaname":"@Saundefined","date":"2015-10-06T15:22:12.000Z","user_avatarmedium":"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/c2/c2ff9427410ea1121363de0e651f6d4e8c485ab6_medium.jpg"},{"id":661,"message_text":"df","user_steamid":"76561198056267433","user_personaname":"@Saundefined","date":"2015-10-06T15:22:12.000Z","user_avatarmedium":"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/c2/c2ff9427410ea1121363de0e651f6d4e8c485ab6_medium.jpg"}]

0 个答案:

没有答案