我正在尝试使用基于redis的会话存储,使用connect redis,通过unix域套接字进行通信。
这里有:Redis Connection via socket on Node.js但是答案是特定于节点redis的,而不是redis会话存储的connect redis。
我想通过创建自己的node redis对象,使用并传入一个'client'参数,可以很容易地完成任务,如自述文件的'options'部分所述:https://github.com/visionmedia/connect-redis
但是,当我这样做时,req.session参数永远不会在express应用程序上设置。
var Redis = require('redis');
var RedisStore = require('connect-redis')(express);
var redis = Redis.createClient(config['redis']['socket']);
以及会话组件:
app.use(express.session({
store: new RedisStore({client: redis})
}));
我遗漏了什么吗?
最佳答案
看起来你做的一切都很好…我做了一个小的概念证明,对我很有用。这是我的完整代码:
var http = require('http'),
express = require('express'),
redis = require('redis'),
RedisStore = require('connect-redis')(express);
var redisClient = redis.createClient( 17969, '<redacted>.garantiadata.com',
{ auth_pass: '<redacted>' } );
var app = express();
app.use(express.cookieParser('pure cat flight grass'));
app.use(express.session({ store: new RedisStore({ client: redisClient }) }));
app.use(express.urlencoded());
app.use(app.router);
app.get('/', function(req, res){
var html = '';
if(req.session.name) html += '<p>Welcome, ' + req.session.name + '.</p>';
html += '<form method="POST"><p>Name: ' +
'<input type="text" name="name"> ' +
'<input type="submit"></p></form>';
res.send(html);
});
app.post('/', function(req, res){
req.session.name = req.body.name;
res.redirect('/');
});
http.createServer(app).listen(3000,function(){
console.log('listening on 3000');
});
我用的是加兰提亚数据的免费redis账户,这不应该有什么区别。你发现我在做什么和你在做什么有什么不同吗?