1

タイムアウト エラーが発生したときにユーザーに送信される応答をカスタマイズしたいと考えています。具体的には、タイムアウト エラーが発生した理由を説明する静的ページにリダイレクトしたいと考えています。

私は次のようなものを書きたい:

var express = require('express')
var timeout = require('connect-timeout')
var app = express();

var port = process.env.PORT || 8080;

app.use(timeout(10,{"respond":true}));
app.use(haltOnTimedout);

// GET ROUTES HERE

app.listen(port, function() {
    console.log('Our app is running on port '+ port);
});

function haltOnTimedout(req,res,next) {
    if (req.timedout) {
        res.redirect('/timedout.html');
    } else {
        next();
    }
};

上記のコードは意図したとおりに機能しません。タイムアウトが発生しても、ユーザーを静的 Web ページにリダイレクトせずtimedout.html、代わりにエラーをスローします。ServiceUnavailableError: Response timeout

このようなことは可能ですか、それとも何か不足していますか?

4

1 に答える 1

0

誰かが同じ質問を受けた場合、私は最終的に答えを見つけてここに投稿します。

コードの最後に次のコード行を配置しましたserver.js

app.use(haltOnTimedout);
function haltOnTimedout(err,req,res,next) {
    if (req.timedout === true) {
        if (res.headersSent) {
            next(err);
        } else {
            res.redirect('/timedout.html');
        }
    } else {
        next();
    }
};

if (!req.timedout) { res.send(something);}ヘッダーの二重送信を避けるために、すべてのルートを追加します。

于 2016-10-19T21:41:11.350 に答える