как обрабатывать необработанные исключения в библиотеках в node.js - PullRequest
6 голосов
/ 16 февраля 2012

У меня есть приложение node.js, использующее Express и Redis. Мой вопрос, как я могу поймать и обработать ошибку подключения Redis. У меня есть функция app.error в экспрессе, которая обрабатывает большинство ошибок приложения, но, поскольку эта ошибка является ошибкой, возникающей в библиотеке redis, она становится неперехваченным исключением, и все приложение отключается.

Могу ли я просто определить метод on_error на моем Redis-клиенте, и это поможет? Если так, может, какой-нибудь пример кода? Должен ли я как-то обработать это в ноде: ошибка следующего тика? Я не уверен, что точно понимаю следующее утверждение, поэтому не уверен, какова лучшая практика.

В приведенном ниже коде блок catch никогда не срабатывает, даже если есть ошибка подключения

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

Вот необнаруженная ошибка

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)

1 Ответ

11 голосов
/ 16 февраля 2012

Да, вам нужно указать обработчик ошибок:

feedClient = redis.createClient(feedPort, feedHost);
feedClient.on("error", function(err) {
  console.error("Error connecting to redis", err);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...