Node.js Express会话使用连接redis和Unix域套接字

Node.js Express会话使用连接redis和Unix域套接字,node.js,session,express,redis,unix-socket,Node.js,Session,Express,Redis,Unix Socket,我正试图利用基于Redis的会话存储,使用connect Redis,通过UNIX域套接字进行通信 有这样一个问题:但答案是针对节点redis的,而不是针对redis会话存储的connect redis 我认为,通过使用“客户端”参数创建自己的节点redis对象并传入该参数(如自述文件的“选项”部分所述),可以很容易地使事情进展顺利: 但是,当我这样做时,Express应用程序上永远不会设置req.session参数 var Redis = require('redis'); var Redis

我正试图利用基于Redis的会话存储,使用connect Redis,通过UNIX域套接字进行通信

有这样一个问题:但答案是针对节点redis的,而不是针对redis会话存储的connect redis

我认为,通过使用“客户端”参数创建自己的节点redis对象并传入该参数(如自述文件的“选项”部分所述),可以很容易地使事情进展顺利:

但是,当我这样做时,Express应用程序上永远不会设置req.session参数

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');
});
var http=require('http'),
express=require('express'),
redis=require('redis'),
Redistore=require('connect-redis')(express);
var redisClient=redis.createClient(17969,“.garantiadata.com”,
{auth_pass:''});
var-app=express();
app.use(express.cookieParser(“纯猫飞草”);
使用(express.session({store:new RedisStore({client:redisClient}}));
app.use(express.urlencoded());
应用程序使用(应用程序路由器);
app.get('/',函数(req,res){
var html='';
如果(req.session.name)html+='欢迎,+req.session.name+'。

'; html+='Name:'+ ' ' + “

”; res.send(html); }); app.post(“/”,函数(请求,res){ req.session.name=req.body.name; res.redirect('/'); }); http.createServer(app).listen(3000,函数(){ console.log(“监听3000”); });

我使用的是Garantia Data的免费Redis帐户,这不应该有什么区别。您发现我正在做的和您正在做的有什么不同吗?

您在
express.cookieParser()
中链接了吗?如果没有它,会话将无法工作(必须有某种方式来存储会话ID,它通常位于cookie中)是的。道歉;我把一切都精简到我认为合适的程度。如果从Redistore中删除“client:redis”,我实际上有一个工作设置。此外,“redis cli-s/tmp/redis.sock”也可以工作,尽管我第一次尝试时遇到了文件系统权限问题。修复这些都没有帮助。(点头)只是检查一下……Express中间件文档并不总是能很好地指定依赖项。好吧,一切看起来都很好,我恐怕现在没有时间深入研究……我稍后会再回到这个问题上来。