我正在使用火车头框架来创建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
}));但是,请求对象中不存在session对象。即。在控制器实例中:this.req.session是未定义的。我遗漏了什么?我如何配置连接会话中间件以使用redis数据存储?
我的redis服务器在默认端口上运行,当我运行我的服务器时,它显示了一个连接的客户端。只有当我终止服务器时,客户端才会断开连接。
我在Fedora 16上使用Node 0.6.18,redis服务器版本2.4.8,火车头版本0.3.3和express 3.0.4。
发布于 2012-12-09 11:37:04
要让会话在express中工作,以下三项必须按此顺序进行:
this.use(express.cookieParser());
this.use(express.session(...));
this.use(this.router);在我的实现中,我将第三条语句放在第二条语句之上。
显然,这是Express的一个众所周知的特点,我对Express的内部工作原理了解不够多,无法解释为什么会出现这种情况。也许对NodeJS有更多经验的人可以详细介绍一下细节。
发布于 2013-01-10 15:16:43
使用this.use(),您可以将中间件添加到Express的请求/响应处理中:传入的请求在最终到达应用程序之前通过所有中间件,传出的响应在发送回客户端之前沿中间件链返回。
安装中间件的顺序很重要:如果一个中间件(如express.session)依赖于另一个中间件(如express.cookieParser )来解析会话cookie,则首先安装依赖项。
在大多数情况下,this.router应该最后安装,或者几乎最后安装(通常是错误处理中间件),因为它依赖于cookies和会话在被调用之前已经被处理。
https://stackoverflow.com/questions/13780168
复制相似问题