Использование промежуточного программного обеспечения 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 и сеансов, которые были обработаны до его вызова.