2

当使用带有 Redis To Go 的sailsjs v0.10.3 进行会话存储时,req.session始终为undefined.

这是undefined我在本地和 Heroku 部署的时候。当我使用默认适配器req.session时正确定义。memory

我创建了一个sailsjs 应用程序:

sails new testapp
sails generate api test testSet testGet

安装了connect-redis v1.4.7:

npm install connect-redis@~1.4.7

设置配置config/session.js

adapter: 'redis',
host: 'hoki.redistogo.com',
port: 10015,
db: 'redistogo',
pass: '88819aa089d3dd86235f9fad4cb92e48'

设置配置config/socket.js

adapter: 'redis',
host: 'hoki.redistogo.com',
port: 10015,
db: 'redistogo',
pass: '88819aa089d3dd86235f9fad4cb92e48'

创建了一些获取和设置会话值的控制器操作:

UserController.js

testSet: function (req, res) {

  req.session.testVar = "I am the test var!";

  return res.ok();
},

testGet: function (req, res) {
  return res.json({
    testVar: req.session.testVar
  });
}

最后部署到 Heroku:

git init
git add .
git commit -m "Initial commit"
heroku create
heroku addons:add redistogo
git push heroku master
git 

这是错误:

error: Sending 500 ("Server Error") response:  
TypeError: Cannot set property 'testVar' of undefined 
at module.exports.testSet (/app/api/controllers/TestController.js:46:25)

看起来这个简单的例子应该可以工作。

这是上面示例的回购:

https://github.com/derekbasch/sailsjs-redistogo-testapp

有谁知道我做错了什么?

更新:

我尝试在 Heroku 上使用 MemoryStore 适配器来获取/设置会话变量。那也失败了undefined。它在本地工作。现在我更加困惑了。

4

1 回答 1

1

我们正在使用 rediscloud(heroku 上的 Sails 应用程序)并且db属性设置为0. 这可能是问题吗?

此外,您应该通过 en env 变量解析 heroku 提供的 URL。这就是我们使用的(咖啡脚本):

parseRedisUrl = ( url ) ->
  parsed = require( 'url' ).parse( url )
  password = (parsed.auth || '').split( ':' )[1]

  hostname: parsed.hostname
  port: parsed.port
  password: password

redis = parseRedisUrl( process.env.REDISCLOUD_URL || "redis://localhost:6379" )

module.exports.session =

  secret: '...'

  adapter: 'redis'
  host: redis.hostname
  port: redis.port
  pass: redis.password
  db: 0
  ttl: 60 * 60 * 24
于 2015-02-12T04:06:21.493 回答