ExpressJS:redis坏了我该怎么办



有问题的代码: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应用程序。它允许您在异步代码中抛出错误,并用错误处理程序捕获它。

相关内容

最新更新