1

我尝试使用连接域来处理错误。在大多数情况下都可以,但它会因 redis 回调而失败。如何解决这个问题?

这是我的应用

var http = require('http');
var express = require('express');
var connectDomain = require('connect-domain');
var redis = require("redis").createClient();

var app = express();
app.use(connectDomain());

app.get('/', function (req, res) {
    throw new Error("Handler OK");
});

app.get('/error', function (req, res) {
    redis.get("akey", function(err, reply) {
        throw new Error("Handler error");
        res.end("ok");
    });
});

app.use(function (err, req, res, next) {
    res.end(err.message);
});

http.createServer(app).listen(8989, function() {
    console.log("Express server started ");
});

我使用nodejs 0.8.16,所有模块都是最新的

4

2 回答 2

8

不确定域是否应该捕获它 - 但您可以通过设置错误处理程序来捕获 redis 错误,如下所示:

// handle redis connection temporarily going down without app crashing
redisClient.on("error", function(err) {
    console.error("Error connecting to redis", err);
});

当连接断开时,您的处理程序将在 redis 尝试重新连接时继续被调用。如果最终成功,一切都会自行恢复在线。

于 2013-09-03T17:26:09.713 回答
0

您也可以尝试https://www.npmjs.org/package/wait-for-redis。它确保客户端可以等待服务器启动,以防客户端提前启动。

于 2014-07-28T17:04:55.153 回答