Node.js使用connect-redis与Unix域套接字进行Express会话

时间:2014-01-28 21:45:16

标签: node.js session express redis unix-socket

我正在尝试使用基于Redis的会话存储,使用 connect-redis ,通过UNIX域套接字进行通信。

有:Redis Connection via socket on Node.js,但答案仅针对 node-redis ,而不是针对Redis会话存储的 connect-redis

我认为通过使用并传入'client'参数创建我自己的 node-redis 对象来实现目标很容易,如'此处自述文件的选项部分: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})
}));

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

看起来你正在做的一切......我把一个小概念证明放在一起,它对我有用。这是我的完整代码:

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');
});

我正在使用来自Garantia Data的免费Redis帐户,而不是那应该有所作为。你发现我在做什么和你在做什么之间有什么不同吗?