node.js - NodeJS + ExpressJS + RedisStore session 未定义

标签 node.js session express redis

我已经解决了很多关于同一问题的问题,但各种解决方案都没有帮助。我使用 Redis 在集群 NodeJS+ExpressJS 应用程序中存储 session ,但 session 始终是未定义的。这是我的 Express 设置:

var express = require('express'),
    RedisStore = require('connect-redis')(express),
    Config = require('./config/config'),
    cluster = require("cluster"),
    QueryManager = require('./service/query_manager'),
    app = express();



// --- Index --- //
function renderSplash(req, res) {
    res.render(...);
}
function renderIndex(req, res) {
    res.render(...);
}

app.get('/', function(req, res) {
    if(req.session.user === null) {
        renderSplash(req, res);
    } else {
        renderIndex(req, res);
    }
});

// --- Configuration ---//
//EJS
app.engine('.html', require('ejs').__express);
app.set('view engine', 'html');
app.set('views', __dirname + '/public');

app.configure(function() {
    //Session
    app.use(express.cookieParser());
    app.use(express.session({
        store: new RedisStore({
            host: Config.redis.host,
            port: Config.redis.port
        }),
        secret: 'Its a secret.',
        cookie: { secure: true }
    }));    

    app.use(validateRequest); //Ensures we're at www. to hit the LB
    app.use(express.static(__dirname+'/public'));
    app.use(express.compress);
    app.use(app.router);
});

即使不使用 Redis 存储,我也会收到以下错误: 类型错误:无法读取未定义的属性“用户”

最佳答案

您必须在路由之前实例化 session 。

var express = require('express'),
    RedisStore = require('connect-redis')(express),
    Config = require('./config/config'),
    cluster = require("cluster"),
    QueryManager = require('./service/query_manager'),
    app = express();

app.use(express.cookieParser());
app.use(express.session({
    store: new RedisStore({
        host: Config.redis.host,
        port: Config.redis.port
    }),
    secret: 'Its a secret.',
    cookie: { secure: true }
}));    

// --- Index --- //
function renderSplash(req, res) {
    res.render(...);
}
function renderIndex(req, res) {
    res.render(...);
}

app.get('/', function(req, res) {
    if(req.session.user === null) {
        renderSplash(req, res);
    } else {
        renderIndex(req, res);
    }
});

关于node.js - NodeJS + ExpressJS + RedisStore session 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20752898/

相关文章:

node.js - 访问循环依赖中模块导出的不存在属性 'padLevels'

node.js - 如何通过终端(ubuntu 或 windows)查找 google chrome 或 firefox tab url?

session - 如何访问 Controller 中的 session 变量

php - session_set_save_handler - 为什么此代码不起作用?

javascript - Express res.render 重定向后不工作

javascript - 添加元数据以表达路线

javascript - node.js 找不到模块 './lib/compat'

node.js - 如何在 npm 启动期间在 Project.js 中解析 'npm ERR! code ELIFECYCLE'

asp.net - POST请求的GENERAL_REQUEST_ENTITY期间发生错误,导致ASP .NET session 状态永不解锁

node.js - 在 Nodejs 中上传文件时,Formidable 不会 form.parse()