2
我試圖讓快速會話在Redis中存儲會話,但它似乎並不像它想要保存。當我恢復到默認的會話存儲時,它可以完美地工作。 Redis守護程序以默認配置託管在Vagrant虛擬機上,並且該應用程序可以連接到它,儘管它不想將會話保存到它。connect-redis和快速會話結果在req.session undefined
這裏是我的代碼:
var express = require('express');
var glob = require('glob');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var compress = require('compression');
var methodOverride = require('method-override');
var session = require('express-session');
var passport = require('passport');
var redis = require('redis');
var RedisStore = require('connect-redis')(session);
var auth = require('./passport');
var flash = require('connect-flash');
module.exports = function(app, config) {
app.set('views', config.root + '/app/views');
app.set('view engine', 'jade');
// app.use(favicon(config.root + '/public/img/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(cookieParser());
app.use(session({
store: new RedisStore({
host: config.redis.host,
port: config.redis.port
}),
secret: config.secret,
saveUninitialized: true,
resave: false
}));
/*app.use(session({
secret: config.secret,
saveUninitialized: true,
resave: true
}));*/
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use(compress());
app.use(express.static(config.root + '/public'));
app.use(methodOverride());
var controllers = glob.sync(config.root + '/app/controllers/*.js');
controllers.forEach(function (controller) {
require(controller)(app);
});
app.use(function (req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
if(app.get('env') === 'development'){
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err,
title: 'error'
});
});
}
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {},
title: 'error'
});
});
};
正如你所看到的,我得到了默認的註釋掉了,如果我刪除這些評論並註釋掉Redis的商店,它的作品,因爲它應該。任何線索爲什麼發生這種情況?我沒有收到一個錯誤。
我我曾嘗試創建一個單獨的客戶端實例,但使用與此處提供的完全相同的代碼,但無濟於事。任何其他線索?謝謝! – Svenskunganka
您是否可以爲redisClient發出的其他事件(如'ready','connect'或'end')添加偵聽器以查看連接是否實際建立? – lukaszfiszer
我現在開始工作了,得到了一個ECONNRESET錯誤。 Vagrant虛擬機已經配置了另一個Redis服務器......另一個不起作用的就是'app.use(flash())'這一行。當我嘗試訪問'req.flash('error');'哪個Passport發送時,它是空的。它與默認快速會話存儲一起工作,但由於某種原因,不適用於Redis。 – Svenskunganka