我尝试使用connect-domain来处理错误。在大多数情况下它没问题,但它使用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,所有模块都是最新的
答案 0 :(得分:8)
不确定域是否应该捕获 - 但是您可以通过设置错误处理程序来捕获redis错误,如下所示:
// handle redis connection temporarily going down without app crashing
redisClient.on("error", function(err) {
console.error("Error connecting to redis", err);
});
当连接断开时,当redis尝试重新连接时,处理程序将继续被调用。如果它最终成功,一切都会在它自己的网上回归。
答案 1 :(得分:0)
您也可以尝试https://www.npmjs.org/package/wait-for-redis。它可以确保客户端可以等待服务器启动,以防客户端提前启动。