我从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';
});