node.js - 在nodejs/expressjs中使用RedisStore

标签 node.js session express redis

我正在尝试访问 Express 中的 session 数据,因此我想在配置 Express 时尝试声明 connect-redis session 存储。但是,我不明白为什么这不起作用:

var express = require('express');
var http = require('http');
var RedisStore = require('connect-redis')(express);

var app = express();
app.set('port', process.env.PORT || 3000);
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat", store: new RedisStore }));
//app.use(express.session({ secret: "keyboard cat" }));
app.use(app.router);

app.get('/', function(req, res){
    console.log('/');
    req.session.items = [ 'apple', 'orange' ];
    res.end('items configured');
});

app.get('/items', function(req, res){
    console.log('/items: ', req.session.items);
    var s = JSON.stringify(req.session.items);
    res.end('items: ' + s);
});

var server = http.createServer(app).listen(app.get('port'), function(){
    console.log('Express server listening on port ' + app.get('port'));
});

“/”路由只是使用 session 配置项目。

“/items”路由显示 session 中的项目列表。

它使用标准的expressjs session 存储来工作。 使用 connect-redis 不起作用(req.session 未定义)

我假设 redis 存储将在应用程序加载/卸载时实例化并销毁(或者我是否需要它在 Node/express 应用程序之外运行?)

有什么想法吗?

最佳答案

如果 RedisStore 无法连接到您的 Redis 服务器,

req.session 将是未定义的。因此它要么没有运行,要么没有在 RedisStore 正在寻找它的默认位置 (127.0.0.1:6379) 上运行。

如果是后者,您可以使用 options 配置位置RedisStore 构造函数的参数。

关于node.js - 在nodejs/expressjs中使用RedisStore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20244026/

相关文章:

javascript - requirejs 优化器无法在 jquery 中加载

javascript - TypeError : req. session.regenerate 不是使用 Passport 的函数

node.js - 使用 ECDH 和 nodejs 加密解密 secret

php - 我怎样才能让记住我更安全

javascript - 通过搜索单词来读取 txt 文件,并检索找到的单词的行数并计算找到的单词的行数 - 可能吗?

javascript - window.open 未在同一 session 中打开

c++ - c++ client session 和 c_api TF_Session 以及 tensorflow 源代码中的 core/public/session 之间有什么关系?

node.js - Sequelize 数据库错误且没有错误消息

javascript - Heroku 'H12' Node JS 应用程序请求超时错误

javascript - 如何使用 Express 在 node.js 中关闭 HTTP 连接