在 Node.js / Express 中的路由中传递 Redis 键值
Passing Redis Key-value in Routes in Node.js / Express
这与此类似question,但我的代码有多个路由。
下面的代码适用于我想做的事情,但我想知道是否有更简洁的方法来编写它,因为我对 Node/Express/Redis 还很陌生。
var express = require('express');
var router = express.Router();
var io = require('socket.io');
var redis = require('./../lib/redis');
redis.get('count', function(err, value) {
if(err) throw err;
/* GET Dashboard */
router.get('/', function(req, res) {
res.render('dashboard', {title: 'Data Dashboard', count: value });
});
/* GET Backend */
router.get('/backend', function(req, res) {
res.render('backend', {title: 'Backend', count: value });
});
});
module.exports = router;
基本上,我只是将一个 Redis 键值传递给我的两个路由。
任何清理它的建议都将受到赞赏。
按照您编写代码的方式,您将在整个应用程序生命周期中传递相同的 count
键值。从 cleaning
向上的角度来看,代码没有任何问题,但从服务的角度来看,路由不应在 REDIS GET
回调中。
获取路由内的值
// Use everytime you need to count the key
function redisCount = function(callback) {
redis.get('count', function(err, value) {
if(err) callback(err)
callback(null, value)
}
}
/* GET Dashboard */
router.get('/', function(req, res) {
redisCount(function(err,value) {
if(err) throw err;
res.render('dashboard', {title: 'Data Dashboard', count: value });
})
});
/* GET Backend */
router.get('/backend', function(req, res) {
redisCount(function(err,value) {
if(err) throw err;
res.render('backend', {title: 'Backend', count: value });
})
});
但是,如果您这样做 count
调用 绝对是每条路由 ,我会建议使用一个中间件,它只在每次调用的上下文中设置值:
在单独的中间件中获取值
app.use(function (req, res, next) {
// using the same function for the redis count
redisCount(function(err, value) {
// respond with error
if (err) res.status("Could not connect to Redis")
// otherwise set the value in the session
req.session.value = value
// and move on to the next middleware
next()
});
});
// now simply declare your routes
/* GET Dashboard */
router.get('/', function(req, res) {
res.render('dashboard', {title: 'Data Dashboard', count: req.session.value });
});
/* GET Backend */
router.get('/backend', function(req, res) {
res.render('backend', {title: 'Backend', count: req.session.value });
});
这与此类似question,但我的代码有多个路由。
下面的代码适用于我想做的事情,但我想知道是否有更简洁的方法来编写它,因为我对 Node/Express/Redis 还很陌生。
var express = require('express');
var router = express.Router();
var io = require('socket.io');
var redis = require('./../lib/redis');
redis.get('count', function(err, value) {
if(err) throw err;
/* GET Dashboard */
router.get('/', function(req, res) {
res.render('dashboard', {title: 'Data Dashboard', count: value });
});
/* GET Backend */
router.get('/backend', function(req, res) {
res.render('backend', {title: 'Backend', count: value });
});
});
module.exports = router;
基本上,我只是将一个 Redis 键值传递给我的两个路由。 任何清理它的建议都将受到赞赏。
按照您编写代码的方式,您将在整个应用程序生命周期中传递相同的 count
键值。从 cleaning
向上的角度来看,代码没有任何问题,但从服务的角度来看,路由不应在 REDIS GET
回调中。
获取路由内的值
// Use everytime you need to count the key
function redisCount = function(callback) {
redis.get('count', function(err, value) {
if(err) callback(err)
callback(null, value)
}
}
/* GET Dashboard */
router.get('/', function(req, res) {
redisCount(function(err,value) {
if(err) throw err;
res.render('dashboard', {title: 'Data Dashboard', count: value });
})
});
/* GET Backend */
router.get('/backend', function(req, res) {
redisCount(function(err,value) {
if(err) throw err;
res.render('backend', {title: 'Backend', count: value });
})
});
但是,如果您这样做 count
调用 绝对是每条路由 ,我会建议使用一个中间件,它只在每次调用的上下文中设置值:
在单独的中间件中获取值
app.use(function (req, res, next) {
// using the same function for the redis count
redisCount(function(err, value) {
// respond with error
if (err) res.status("Could not connect to Redis")
// otherwise set the value in the session
req.session.value = value
// and move on to the next middleware
next()
});
});
// now simply declare your routes
/* GET Dashboard */
router.get('/', function(req, res) {
res.render('dashboard', {title: 'Data Dashboard', count: req.session.value });
});
/* GET Backend */
router.get('/backend', function(req, res) {
res.render('backend', {title: 'Backend', count: req.session.value });
});