Volevo solo sapere, all'inizio del mio processo NodeJS, se Redis è stato avviato o meno (quindi la sessione degli utenti verrà archiviata o meno).Controlla se redis è in esecuzione -> node js
Ecco quello che ho per il momento:
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))
Ecco quello che è uscita in entrambi i casi (quando Redis è in esecuzione o meno):
redis is not running - sessions won't be written to disk
redis is not running
Error: Redis connection to 6379:localhost failed - connect ENOENT
Quindi devo 2 domande:
Come può Devo controllare se redis è in esecuzione prima di impostare il mio SessionStore (è comunque necessario verificare in modo sincrono se è in esecuzione redis)?
Perché mi dà un errore anche quando è in esecuzione redis?
GRAZIE!
Nota: sto usando di default host/port (localhost, 6379) e il RedisStore funziona come previsto.
Nota 2: Sto usando Windows ... ma non abbiate paura, dovrebbe avere lo stesso comportamento!
Aggiornamento: Domanda # 2 risposto VMX => Grazie!
Update 2: Domanda # 1 risposta da Nathan => Grazie!
Hai davvero avviato il server (digita 'redis-server &')? –
Sì, il mio RedisStore si comporta come previsto, Redis salva con successo le sessioni utente. Posso recuperare la mia sessione usando il terminale redis_client. Non riesco a connettermi a redis usando createClient() – Oliboy50
node_redis comportamento predefinito è quello di accodare i comandi dal momento in cui si chiama 'redis.createClient' fino a quando non viene stabilita la connessione, quindi è ben possibile che sia possibile istanziare un RedisStore e continuare con il tuo business senza dover verificare se redis è pronto. Provaci. – Mahn