【问题标题】:Error Handler Nodejs Redis Connect-domain fail错误处理程序 Nodejs Redis 连接域失败
【发布时间】:2013-08-01 03:45:20
【问题描述】:

我尝试使用连接域来处理错误。在大多数情况下都可以,但它会因 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,所有模块都是最新的

【问题讨论】:

    标签: node.js error-handling node-redis


    【解决方案1】:

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

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

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

    【讨论】:

    • 当然,我的问题必须解决生产使用。因为这个问题,我花了很多精力去捕捉异常,以确保系统不会在生产模式下终止。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-01-22
      • 2017-07-06
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      • 2019-01-03
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多