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
だから私は2つの質問があります:
SessionStore を設定する前に redis が実行されているかどうかを確認するにはどうすればよいですか (redis が実行されているかどうかを同期的に確認する方法はありますか) ?
redis が実行されている場合でもエラーが発生するのはなぜですか?
ありがとう!
注: デフォルトのホスト/ポート (localhost、6379) を使用しており、RedisStore は期待どおりに動作します。
注 2 : 私は Windows を使用していますが、心配する必要はありません。同じ動作をするはずです。
更新: vmxが回答した質問 #2 => ありがとう!
更新 2 : Nathanが回答した質問 #1 => ありがとうございます。