2012-02-16 12 views
6

Tengo una aplicación node.js que usa Express y Redis. Mi pregunta es cómo atrapo y manejo un error de conexión de Redis. Tengo una función app.error en Express que maneja la mayoría de los errores de la aplicación, pero como este error es un error que se lanza a la biblioteca redis, se convierte en una excepción no detectada y toda la aplicación se cae.cómo manejar excepciones no controladas en bibliotecas en node.js

¿Puedo simplemente definir un método on_error en mi cliente redis y eso servirá? Si es así, ¿tal vez un código de muestra? ¿Debo de alguna manera manejarlo en un node.js próximo tic error? No estoy seguro de entender la siguiente declaración exactamente, así que no estoy seguro de cuál es la mejor práctica.

En el código de abajo del bloque catch no es golpeado, incluso si hay un error de conexión

try 
{ 
    feedClient = redis.createClient(feedPort, feedHost); 
} 
catch (error) 
{ 
    console.log('cannnot start redis' + error); 
} 

Aquí está el error sin capturar

node.js:134 
     throw e; // process.nextTick error, or 'error' event on first tick 
     ^
Error: Redis connection to localhost:6379 failed - ECONNREFUSED, Connection refused 
    at RedisClient.on_error (/node_modules/redis/index.js:136:24) 
    at Socket. (/node_modules/redis/index.js:70:14) 
    at Socket.emit (events.js:64:17) 
    at Array. (net.js:830:27) 
    at EventEmitter._tickCallback (node.js:126:26) 
+0

Casi duplicado en http://stackoverflow.com/q/8071291/638546 –

Respuesta

11

Sí, es necesario que especifique un controlador de errores:

feedClient = redis.createClient(feedPort, feedHost); 
feedClient.on("error", function(err) { 
    console.error("Error connecting to redis", err); 
}); 
+2

yah solo estaba en Han lo dling por una conexión redis, tenía 3, no manejaba otros dos, no podía entender por qué estaba saliendo mal. +1 –

+0

El nodo-módulo redis está prototipando internamente EventEmitter. –

Cuestiones relacionadas