我正在使用Locomotive框架来创建nodejs web应用程序。
在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
未定义。我缺少什么以及如何配置连接会话中间件以使用redis数据存储?
我的redis服务器在默认端口上运行,它显示我运行服务器时连接的客户端。只有在我终止服务器时,客户端才会断开连接。
我在Fedora 16上使用Node 0.6.18,redis服务器版本2.4.8,机车版本0.3.3和Express 3.0.4。
答案 0 :(得分:0)
对于在express中工作的会话,以下三个必须按此顺序排列:
this.use(express.cookieParser());
this.use(express.session(...));
this.use(this.router);
在我的实现中,我在第二个语句之上有第三个语句。
显然,这是Express的一个已知的特质,我对Express的内部工作原理没有足够的了解,以解释为什么会出现这种情况。可能对NodeJS有更多经验的人可以详细说明细节。
答案 1 :(得分:0)
使用this.use()
,您可以向Express'请求/响应处理添加中间件:传入请求通过所有中间件,然后在应用程序结束,传出响应返回到中间件链,然后再发送回客户端
安装中间件的顺序很重要:如果您有一个依赖于另一个中间件(如express.session
,以解析会话cookie)的中间件(如express.cookieParser
),则首先安装依赖项。
在大多数情况下,this.router
应该安装在最后或几乎最后(通常后面是错误处理中间件),因为它取决于cookie和会话在被调用之前已经处理过。