当使用 sailsjs v0.10.3 和 Redis To Go 进行会话存储时,
req.session
始终为 undefined
。
当我部署到本地和 Heroku 时,都是
undefined
。当我使用默认的 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
也失败了。它在本地工作。现在我更困惑了。
我们正在使用 rediscloud(heroku 上的 sails 应用程序),并且
db
属性设置为 0
。这会是问题所在吗?
此外,您应该通过 en env 变量解析 heroku 提供的 URL。这就是我们使用的(coffeescript):
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