首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在机车框架中使用连接会话中间件和Redis

在机车框架中使用连接会话中间件和Redis
EN

Stack Overflow用户
提问于 2012-12-09 01:52:29
回答 2查看 623关注 0票数 0

我正在使用火车头框架来创建nodejs web应用程序。

config/environments/all.js中,我有:

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-09 11:37:04

要让会话在express中工作,以下三项必须按此顺序进行:

代码语言:javascript
复制
this.use(express.cookieParser());
this.use(express.session(...));
this.use(this.router);

在我的实现中,我将第三条语句放在第二条语句之上。

显然,这是Express的一个众所周知的特点,我对Express的内部工作原理了解不够多,无法解释为什么会出现这种情况。也许对NodeJS有更多经验的人可以详细介绍一下细节。

票数 0
EN

Stack Overflow用户

发布于 2013-01-10 15:16:43

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13780168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档