0

我正在使用 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
  }));

但是,请求对象中不存在会话对象。IE。在控制器实例中: this.req.session未定义。我缺少什么以及如何配置连接会话中间件以使用 redis 数据存储?

我的 redis 服务器在默认端口上运行,当我运行我的服务器时,它显示一个连接的客户端。只有当我终止服务器时,客户端才会断开连接。

我在 Fedora 16 上使用 Node 0.6.18、redis 服务器版本 2.4.8、机车版本 0.3.3 和 express 3.0.4。

4

2 回答 2

0

要使会话快速工作,以下三个必须按此顺序排列:


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

在我的实现中,我在第二个语句之上有第三个语句。

显然,这是 Express 的一个已知特性,我对 Express 的内部运作了解不足,无法解释为什么会这样。可能对 NodeJS 有更多经验的人可以详细说明。

于 2012-12-09T03:37:04.430 回答
0

使用this.use(),您将中间件添加到 Express 的请求/响应处理中:传入请求在到达您的应用程序之前通过所有中间件,而传出响应在发送回客户端之前返回中间件链。

安装中间件的顺序很重要:如果您有一个中间件(如express.session)依赖于另一个中间件(如express.cookieParser,用于解析会话 cookie),则首先安装依赖项。

在大多数情况下,this.router应该最后安装,或者几乎最后安装(通常后跟错误处理中间件),因为它取决于在调用它之前已经处理过的 cookie 和会话。

于 2013-01-10T07:16:42.947 回答