当前位置: 首页 > 面试题库 >

NodeJS + ExpressJS + RedisStore会话未定义

祁嘉瑞
2023-03-14
问题内容

我曾就同一问题经历过许多问题,但各种解决方案都无济于事。我正在使用Redis将会话存储在群集的NodeJS +
ExpressJS应用程序中,但是该会话始终是未定义的。这是我的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存储,我也会收到以下错误: TypeError: Cannot read property 'user' of undefined


问题答案:

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

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


 类似资料:
  • 问题内容: 我觉得这必须埋在文档中的某个地方,但我找不到。 您如何在ExpressJS中关闭或结束(或终止)会话(无论如何)? 问题答案: Express 4.x更新的答案 会话处理不再内置于Express中。这个答案是指标准的会话模块: https //github.com/expressjs/session 要清除会话数据,只需使用: 该文档对此没有多大用处。它说: 销毁会话,删除req.se

  • 我按照教程步骤尝试SBT: 有什么想法可以解决这个问题吗?

  • 问题内容: 我正在尝试在我的Express应用程序中使用redis进行会话。 我执行以下操作: 稍后,在我的应用程序中,如果执行以下操作: 我得到: 无法读取未定义的属性“ someProperty” 这表明req.session是未定义的 (我可以从config部分的console.log条目中看到) 我肯定有redis运行,并且可以看到我的应用最初连接到它(使用redis-cli监视器) 问题

  • 问题内容: 我是PHP的新手,并且在会话方面更是初学者。我有index.php页面,用户可以在其中注册和登录。表单分别发布到validate.php和loginvalidate.php页面,以进行注册和登录。 加载时在index.php上出现以下错误: 1)注意:未定义的索引:已注册2)注意:未定义的索引:从未使用 我已经尝试过多种方式来修改我的文字,但是我从来没有解决错误。 Index.php

  • 我有一个这样的静态ExpressJS服务器: 当我启动服务器时,它使用20MB的v8堆。如果我每秒重新加载一个页面,则使用的堆会不断增长。4小时后,使用的v8堆将达到40MB。v8堆的总容量达到80MB,RSS(进程使用的总内存)达到130MB。 为什么这个简单而静态的服务器使用这么多内存?这似乎是内存泄漏。如果我不停止页面重新加载,使用的内存会继续增长。 如果像这样一个简单的静态服务器使用了太多

  • 问题内容: 我正在nodejs / expressjs中构建购物车应用程序。在用户登录后重定向到正确的页面时,我遇到了一些问题。我发现有几篇文章密切相关,但是我从给定的文章中进行修复的所有尝试都没有成功。 发生的情况是,用户输入其登录信息,然后单击登录按钮。Ajax请求将数据发送到此访问功能。该功能首先检查用户是否存在于数据库中。如果是,那么它将继续比较bcrypt密码,如果它们相等,则它们成功登