如何从app.js发送redis对象到html <div>?

时间:2017-03-11 21:52:27

标签: express

我正在构建一个快速的Express JS应用程序。我已从其他应用程序向Redis发送数据。 我做了一个LPUSH。我能够做到这一点:

client.lrange('stash', 0, 10, function(err, reply) {
    console.log(reply);
});

我的目标是,而不是做一个console.log(“...”),我想把它发送到我的index.html。 关于如何做到这一点的任何想法?

编辑:这是我的app.js文件:

var express = require('express');
var redis = require('redis');
var app = express();

app.use(express.static('public')); //used to get image
app.engine('html', require('ejs').renderFile); //ejs, not handlebars

function index(req,res, next) {
    testController.index(req, res, next);   
}

app.get('/', function(req, res){
    res.render('index.html');
});

app.get('*', function(req, res){
    res.render('404.html');
});

//redis stuff
var client = redis.createClient();

client.on('connect', function() {
    console.log('connected');
});

client.lrange('stash', 0, 10, function(err, reply) {
    console.log(reply); //instead of this, let's place that into a div
});
//end redis

app.listen(3000, function(){
    console.log('My example app is now running! (3000)')
});

1 个答案:

答案 0 :(得分:2)

根据我的理解,您可以使用ejs将数据直接插入到您的html中。问题当然是我不知道client.lrange是如何工作的,但我知道express从上到下读中间件。如果lrangedb中提取您需要的数据,您可以将数据保存到全局var data并调用要更新的html的端点;用ejs渲染它。

为数据创建占位符

var data;

从服务器提取数据并全局保存

client.lrange('stash', 0, 10, function(err, reply) {
  data = reply;
});

使用ejs标签

使用ejs渲染html页面
app.get('/', function(req, res) {
    res.render('index.html', {reddisData: data});
});

将其插入您的html

<a>
   <%= reddisData %>
</a>

一起

var express = require('express');
var path = require('path');

app = express()
app.engine('html', require('ejs').renderFile);

app.set('html', 'ejs');

var data;

client.lrange('stash', 0, 10, function(err, reply) {
  data = reply;
});

app.get('/', function(req, res) {
  res.render('index.html', {reddisData: data});
});

希望这会有所帮助,如果它不适合你,那么这个想法就是重要的。请使用ejs来解决您的问题。