【问题标题】:Using connect-session middleware with Redis in Locomotive framework在 Locomotive 框架中使用连接会话中间件和 Redis
【发布时间】:2012-12-08 17:52:29
【问题描述】:

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

【问题讨论】:

    标签: javascript node.js locomotivejs


    【解决方案1】:

    要使会话以 express 运行,以下三个必须按此顺序排列:

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

    在我的实现中,第三条语句高于第二条语句。

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-06
        • 2011-10-18
        • 1970-01-01
        • 2018-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-13
        相关资源
        最近更新 更多