从Redis检索数据并在前端显示它们

时间:2015-07-14 10:31:03

标签: angularjs node.js redis socket.io node-redis

我从NodeJS(Express)中的Redis列表中推送和检索数据,但我无法发送它们并显示在前端(Angular)上。

我使用lpush方法推送消息并使用lrange检索并且我想将这些数据发送到前端(使用express - > app.get {})。在前端,我使用Angular angular-socket-io factory

请查看下面的server.js文件。

var express = require('express');

var app = express();
app.use('/', express.static('../app/'));
app.use('/bower_components', express.static('../bower_components/'));

var server = require('http').createServer(app);
var io = require('socket.io').listen(server);

var bodyParser = require('body-parser');
var jsonParser = bodyParser.json();
var urlencodedParser = bodyParser.urlencoded({ extended: false });

var redis = require('redis')
var redisClient = redis.createClient();

/**
 *  Store a message in redis
 *
 *  @function storeMessage
 *  @param {String} name
 *  @param {Object} data
 */

function storeMessage (name, data) {
    var message = JSON.stringify({name:name, data:data});

    // store up to 10 messages
    redisClient.lpush('messages', message, function(error) {
        if (error) throw error;
        redisClient.ltrim('messages', 0, 10);
    });
};

io.sockets.on('connection', function (client) {

    /**
     *  When users join, set their nickname and broadcast they are here
     *  Add the user to redis
     */

    redisClient.lrange('messages', 0, -1, function( error, messages) {
        messages = messages.reverse();

        messages.forEach(function(message) {
            message = JSON.parse(message);
            client.emit('messages',message.name + ' : ' + message.data);
        });
    });
});

//!!TROUBLE HERE?? -> send data to the frontend
app.get('/messages', function (err, res) {
    'use strict';

    messages.forEach(function(res) {
        client.emit("messages", res.name + ": " + res.data);
    });
    res.send(messages);
});

server.listen(3000, function () {
    'use strict';
});

0 个答案:

没有答案