我正在尝试访问express中的会话数据,所以我想在配置express时我会尝试声明一个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'));
});
'/'路由只是使用会话配置项目。
'/ items'路线显示会话中的项目列表。
它使用标准的expressjs会话存储。 它不能使用connect-redis(req.session未定义)
我假设redis商店将在app加载/卸载时被实例化和销毁(或者我是否需要在node / express app之外运行?)
有什么想法吗?
答案 0 :(得分:2)
req.session
无法连接到您的Redis服务器,则 RedisStore
将被取消定义。所以它没有运行,或者它没有在RedisStore
正在寻找它的默认位置上运行(127.0.0.1:6379
)。
如果是后者,您可以使用RedisStore
构造函数的options
参数配置位置。
答案 1 :(得分:1)
试一试。
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");
});
link:https://codeforgeek.com/2015/07/using-redis-to-handle-session-in-node-js/
答案 2 :(得分:0)
您应该调用RedisStore构造函数(使用())
app.use(express.session({ secret: "keyboard cat", store: new RedisStore()}));