【发布时间】:2014-08-05 14:03:39
【问题描述】:
我只是想知道,在我的 NodeJS 进程开始时,Redis 是否已启动(因此是否会存储用户会话)。
这是我目前拥有的:
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
var redis = require("redis");
var client = redis.createClient(global.redis.host, global.redis.port);
// Check if redis is running
var redisIsReady = false;
client.on('error', function(err) {
redisIsReady = false;
console.log('redis is not running');
console.log(err);
});
client.on('ready', function() {
redisIsReady = true;
console.log('redis is running');
});
// Here I use express-session, but I want to set a store only if redis is ready
sessOptions = {
[...]
}
// Store setting
if (redisIsReady) {
sessOptions.store = new RedisStore({
host: global.redis.host,
port: global.redis.port
});
} else {
console.log("redis is not running - sessions won't be written to disk");
}
// app.use(session(sessOptions))
这是两种情况下的输出(无论 Redis 是否运行):
redis is not running - sessions won't be written to disk
redis is not running
Error: Redis connection to 6379:localhost failed - connect ENOENT
所以我有两个问题:
如何在设置我的 SessionStore 之前检查 redis 是否正在运行(无论如何要同步检查 redis 是否正在运行)?
为什么redis在运行时还是报错?
谢谢!
注意:我使用的是默认主机/端口(localhost,6379),RedisStore 按预期工作。
注意 2:我使用的是 Windows...但不要害怕,它应该具有相同的行为!
更新:vmx 回答了问题 #2 => 谢谢!
更新 2:Nathan 回答了问题 #1 => 谢谢!
【问题讨论】:
-
你真的启动了服务器吗(输入
redis-server &)? -
是的,我的 RedisStore 运行正常,Redis 成功保存了用户会话。我可以使用 redis_client 终端检索我的会话。我只是无法使用 createClient() 连接到 redis
-
node_redis 默认行为是从您调用
redis.createClient到建立连接的那一刻起对命令进行排队,因此您很可能只需实例化一个 RedisStore 并继续您的业务,而无需检查是否redis 准备好了。试一试。
标签: node.js session express redis express-4