Вопрос по session, node.js, express – 'session' не определен при использовании Express / Redis для хранения сессии

21

Я пытаюсь использовать Redis для сеансов в моем приложении Express.

Я делаю следующее:

<code>var express = require('express');
var RedisStore = require('connect-redis')(express);

app.configure('development', function(){     
    app.use(express.session({ secret: "password", 
                            store: new RedisStore({
                                          host: "127.0.0.1",
                                          port: "6379",
                                          db: "mydb"
                                        })  
          }));
</code>

Позже, в моем приложении, если я сделаю что-то вроде:

<code>var whatever = req.session.someProperty;
</code>

Я получил:

Cannot read property 'someProperty' of undefined

Это указывает на то, что req.session не определен (I can see this from a console.log entry in my config section)

Я определенно запустил Redis и вижу, что мое приложение подключается к нему изначально (с помощью Redis-Cli Monitor).

Ваш Ответ

5   ответов
1

что redis был просто настроен на другой порт.

53

app.use(express.cookieParser());
app.use(express.session());
app.use(app.router);

Я не уверен, является ли маршрутизатор обязательным для использования сеансов, но он нарушает их, если он размещен перед ними.

Этот ответ является более полным. Вы должны сделать обе вещи: 1) включить cookieParser () и 2) переместить «app.use (app.router)»; ко дну. Я думаю, что это должен быть правильный ответ.
У меня был app.use (app.router); перед экспресс.сессией, которая, кажется, сломала его.
этот ответ было трудно найти, должно быть где-то в документах. Upvoted!
даже если все 3 вещи в правильном порядке, требование все еще не определено, не знаю почему.
Как этот ответ обновится с версии 1.5.0? В настоящее время экспресс-сессия представляет собой отдельный модуль. Согласно документам, «промежуточное программное обеспечение парсера файлов cookie больше не нужно использовать для работы этого модуля»;
4

однако это было вызвано изменениями в последней версии Express.

Теперь вам нужно передать express-session в функцию connect-redis exports для расширения session.Store:

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

Пожалуйста, подтвердите, что вы используете версию4.

Полная концепция промежуточного программного обеспечения изменилась. Вам необходимо установить эти промежуточные программы вручную. & Quot; экспресс-сеанс & Quot; является одним из промежуточных программ 4.0.

Я рекомендую прочитать

http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3-0 а такжеhttps://github.com/visionmedia/express/wiki/Migrating-from-3.x-to-4.x

Кроме того, некоторые пользователи были смущены тем, чтоGitHub репо сам по себе называется просто «сессия» но

npm install express-session

верно.

Этот вопрос был задан 17 апреля 2012, поэтому НЕ относится к версии 4 Alex
Для версии 4:stackoverflow.com/questions/31611920/…
10

Похоже, вы пропали:

app.use(express.cookieParser());

до вашегоapp.use(express.session(...)); вызов.

УвидетьВот.

У меня такая же проблема, но у меня есть app.user (cookieParser ())
Имея ту же проблему ... Но все еще не работает.

Похожие вопросы