在机车框架中使用与Redis的连接会话中间件

时间:2012-12-08 17:52:29

标签: javascript node.js locomotivejs

我正在使用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。

2 个答案:

答案 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和会话在被调用之前已经处理过。