1

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を使用しています。すべてのモジュールは最新です

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 に答える