有问题的代码:app.js
var redis = require('redis');
var redisClient = redis.createClient();
redisClient.on('error', function (err) {
console.error('There was an Error ' + err);
});
// do stuff
redisClient.quit(function(err, res) {
console.log('closing redis client.');
});
我正在尝试使用node_redis从我的node.js应用程序连接到redis。然而,我不太确定如何处理Redis宕机的情况。
我有一堆client.on('error', function(err) {})
,但它们似乎从未被调用过。这是正确的处理方法吗?我说错了吗?
我刚开始使用redis/node/express,请原谅我的无知。
EDIT正如Vadim帮助我意识到的那样,我似乎实际上正确地捕捉到了app.js中client.on('error')
的错误。然而,当redis关闭时,我的路由无法捕捉到错误。
由于node_redis是异步的,在我开始向redisClient
发送其他命令之前,redisClient.on('error')
回调没有被及时调用。
我解决这个问题的方法是将"success"代码放入redisClient.on('connect')
处理程序中,该处理程序只有在rediClient成功连接后才会调用。以及我在redisClient.on('error')
中的后备代码。
你可以在github变更集中看到更多关于我如何解决这个问题的信息。
我认为end
事件正是您所需要的。
当已建立的Redis服务器连接关闭时,客户端将发出end。
更新:
如果使用node.js>=0.8.0,则可以使用域模块功能来捕获异步代码中的错误。
您可以将连接域模块用于您的express/connect应用程序。它允许您在异步代码中抛出错误,并用错误处理程序捕获它。