2016-10-19 18 views
0

タイムアウトエラーが発生したときにユーザーに送信される応答をカスタマイズします。具体的には、タイムアウトエラーが発生した理由を説明する静的なページにそれらをリダイレクトする必要があります。Expressとconnect-timeoutを使用してタイムアウト応答をカスタマイズする方法は?

私のような何か書きたい:上記のコードは意図したとおりに動作しない

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

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

+0

正確には機能しません。そしてどの表現を使っていますか? expressバージョン3以下では、 'timeout'を以下のコードでインポートすることができます:' var timeout = express.timeout; ' – mrunde

+0

残念ながら、私は* not * in *を忘れていました:" **ユーザ**をWebページにリダイレクトしません"、編集された質問を参照してください。私はExpress 4.10.2を使用しています – louisdecharson

答えて

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);}を追加します。

関連する問題