2012-02-16 63 views
6

我有一个使用Express和Redis的node.js应用程序。我的问题是如何捕获和处理Redis连接错误。在express中我有一个app.error函数,可处理大多数应用程序错误,但由于此错误是在Redis库中引发的错误,因此它变成未捕获的异常,整个应用程序停止运行。如何在node.js库中处理未处理的异常

我可以在我的redis客户端上定义一个on_error方法吗?如果是这样,也许有一些示例代码我应该以某种方式处理它在node.js下一个滴答错误?我不确定我是否理解下一个陈述,因此不确定最佳做法。

在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) 
+0

几乎重复到http://stackoverflow.com/q/8071291/638546 – 2013-03-12 09:46:37

回答

11

是的,你需要指定一个错误处理程序:

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

耶我只是韩把它当作一个redis连接,有3个,没有处理其他两个,不知道为什么要退出。 +1 – 2014-01-09 00:19:30

+0

redis节点模块在内部原型化EventEmitter。 – 2014-04-07 04:20:41