我只是想知道,在我的NodeJS進程開始時,Redis是否啓動(因此用戶會話將被存儲或不存儲)。檢查redis是否正在運行 - >節點js
這裏是我的時刻:
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時,它爲什麼會給我一個錯誤?
謝謝!
注意:我使用的是默認的主機/端口(本地主機,6379)和RedisStore按預期工作。
注2:我使用Windows ...但不要擔心,它應該有相同的行爲!
更新:問題#2通過回答vmx =>謝謝!
更新2:問題#1通過回答Nathan =>謝謝!
你真的啓動服務器(鍵入'redis-server&')? –
是的,我的RedisStore按預期運行,Redis成功保存用戶會話。我可以使用redis_client終端檢索我的會話。我只是無法使用createClient() – Oliboy50
連接到redis node_redis默認行爲是從您調用'redis.createClient'的那一刻起排隊命令,直到建立連接,所以很可能您可以實例化一個RedisStore並繼續您的業務無需檢查redis是否準備就緒。試一試。 – Mahn