Использование промежуточного программного обеспечения connect-session с Redis в платформе Locomotive

Я использую фреймворк Locomotive для создания web-приложения nodejs.

В config/environments/all.js Я имею:


var express = require('express')
, poweredBy = require('connect-powered-by')
, util = require('util')
, connectAssets = require('connect-assets')
, redis = require('redis')
, RedisStore = require('connect-redis')(express)
, sessionStore = new RedisStore();

........
........

  this.use(express.cookieParser());
  this.use(express.bodyParser());
..........
..........
  this.use(express.session({
    secret: 'LoremIpsumDolorSit_Amet',
    store: sessionStore
  }));

Однако объект сеанса отсутствует в объекте запроса. то есть. в экземпляре контроллера:this.req.session не определено Чего мне не хватает и как настроить промежуточное ПО connect-session для использования хранилища данных redis?

Мой сервер redis работает через порт по умолчанию и показывает клиент, подключенный при запуске моего сервера. Клиент отключается только тогда, когда я прекращаю работу сервера.

Я использую Node 0.6.18, сервер Redis версии 2.4.8, версию локомотива 0.3.3 и Express 3.0.4 на Fedora 16.

2 ответа

Решение

Чтобы сеансы работали в экспрессе, три из следующих пунктов должны быть в этом порядке:


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

В моей реализации у меня было третье утверждение выше второго.

По-видимому, это известная особенность Express, и я недостаточно информирован о внутренней работе Express, чтобы объяснить, почему это так. Вероятно, кто-то, у кого больше опыта работы с NodeJS, сможет уточнить детали.

С this.use()вы добавляете промежуточное программное обеспечение для обработки запросов / ответов Express: входящие запросы проходят через все промежуточное программное обеспечение до того, как попадают в ваше приложение, а исходящие ответы возвращаются в цепочку промежуточного программного обеспечения перед отправкой обратно клиенту.

Порядок установки промежуточного программного обеспечения имеет значение: если у вас есть одно промежуточное программное обеспечение (например, express.session) который зависит от другого промежуточного программного обеспечения (например, express.cookieParser(для анализа файлов cookie сеанса) сначала необходимо установить зависимость.

В большинстве случаев, this.router должен быть установлен последним или почти последним (обычно сопровождаемым промежуточным программным обеспечением для обработки ошибок), потому что это зависит от файлов cookie и сеансов, которые были обработаны до его вызова.

Другие вопросы по тегам