2012-02-16 94 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