2012-02-16 9 views
6

Mam aplikację node.js za pomocą Express i Redis. Moje pytanie brzmi: jak złapać i obsłużyć błąd połączenia Redis. Mam funkcję app.error w wyrażeniu, które obsługuje większość błędów aplikacji, ale ponieważ ten błąd jest błędem, który zostanie zgłoszony w bibliotece redis, staje się nieprzechwyconym wyjątkiem i cała aplikacja przestaje działać.sposób obsługi nieobsługiwanych wyjątków w bibliotekach w pliku node.js

Czy mogę po prostu zdefiniować metodę on_error na moim kliencie Redis i to wystarczy? Jeśli tak, może jakiś przykładowy kod? Czy powinienem jakoś sobie z tym poradzić w kolejnym błędzie node.js? Nie jestem pewien, czy rozumiem dokładnie następną wypowiedź, więc nie jestem pewien, jaka jest najlepsza praktyka.

W kodzie poniżej bloku catch nigdy nie dostanie, nawet jeśli nie jest to błąd połączenia

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

Oto nieprzechwycony błąd

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

Prawie duplikat do http://stackoverflow.com/q/8071291/638546 –

Odpowiedz

11

Tak, należy określić procedurę obsługi błędu:

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

yah ja byłem tylko han zaryzykował go dla jednego połączenia redis, miał 3, nie poradził sobie z dwoma, nie mógł się domyślić, dlaczego się wygłupia. +1 –

+0

Moduł węzła redis wewnętrznie prototypuje EventEmitter. –

Powiązane problemy