在nodejs / expressjs中使用RedisStore

我想快速访问会话数据,所以我想我会尝试在configurationexpress时声明一个connect-redis会话存储。 但是,我不明白为什么这不起作用:

var express = require('express'); var http = require('http'); var RedisStore = require('connect-redis')(express); var app = express(); app.set('port', process.env.PORT || 3000); app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.session({ secret: "keyboard cat", store: new RedisStore })); //app.use(express.session({ secret: "keyboard cat" })); app.use(app.router); app.get('/', function(req, res){ console.log('/'); req.session.items = [ 'apple', 'orange' ]; res.end('items configured'); }); app.get('/items', function(req, res){ console.log('/items: ', req.session.items); var s = JSON.stringify(req.session.items); res.end('items: ' + s); }); var server = http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); }); 

“/”路线只是configuration会话的项目。

“/ items”path显示会话中的项目列表。

它使用标准expressjs会话存储。 它不能使用connect-redis(req.session是未定义的)

我假设的应用程序加载/卸载(或者我需要它在节点/快递应用程序之外运行吗?)将实例化和销毁Redis存储?

有任何想法吗?

如果RedisStore无法连接到您的Redis服务器,则req.session将不确定。 所以它没有运行,或者没有运行在RedisStore正在查找的默认位置( 127.0.0.1:6379 )。

在后者的情况下,您可以使用options参数configurationRedisStore构造函数的位置。

你应该调用RedisStore构造函数(用())

 app.use(express.session({ secret: "keyboard cat", store: new RedisStore()})); 

试试这个。

 var express = require('express'); var redis = require("redis"); var session = require('express-session'); var redisStore = require('connect-redis')(session); var bodyParser = require('body-parser'); var client = redis.createClient(); var app = express(); app.set('views', __dirname + '/views'); app.engine('html', require('ejs').renderFile); app.use(session({ secret: 'ssshhhhh', // create new redis store. store: new redisStore({ host: 'localhost', port: 6379, client: client,ttl : 260}), saveUninitialized: false, resave: false })); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: true})); app.get('/',function(req,res){ // create new session object. if(req.session.key) { // if email key is sent redirect. res.redirect('/admin'); } else { // else go to home page. res.render('index.html'); } }); app.post('/login',function(req,res){ // when user login set the key to redis. req.session.key=req.body.email; res.end('done'); }); app.get('/logout',function(req,res){ req.session.destroy(function(err){ if(err){ console.log(err); } else { res.redirect('/'); } }); }); app.listen(3000,function(){ console.log("App Started on PORT 3000"); }); 

链接: https : //codeforgeek.com/2015/07/using-redis-to-handle-session-in-node-js/