我有一个使用Express和Redis的node.js应用程序。我的问题是如何捕获和处理Redis连接错误。我在express中有一个app.error函数来处理大多数应用程序错误,但由于这个错误是在redis库中抛出的错误,因此它变成了一个未捕获的异常并且整个应用程序都崩溃了。
我可以在我的redis客户端上定义一个on_error方法吗?如果是这样可能是一些示例代码我应该以某种方式处理node.js下一个tick错误?我不确定我完全理解下一个陈述,所以不确定最佳做法是什么。
在下面的代码中,即使存在连接错误,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 :(得分:11)
是的,您需要指定一个错误处理程序:
feedClient = redis.createClient(feedPort, feedHost);
feedClient.on("error", function(err) {
console.error("Error connecting to redis", err);
});