2016-10-17 7 views
1

いくつかのページをレンダリングしたい場合は、一定の時間が経過したら別のページにリダイレクトする必要があります。しかし、私は "彼らは送信された後にヘッダーを設定することはできません。"私が読んだことから、応答が一度だけ使われるべきですが、これが本当であるかどうかはわかりません。私は、この特定の問題に対する助けや解決策に感謝します。すでに使用されているレスポンスの後にリダイレクトするノードjs

app.get('/', function (req, res) { 
    var message = req.flash(); 
    res.render('index', { message: req.flash('message'), hassError: message.length > 0}); 
}); 

app.get('/error', function (req, res) { 
    var timeout = 3000; 

    setTimeout(function (err) { 
     console.log('finished'); 
     if (err) 
      throw err; 
     console.log('################'); 
     res.redirect('/'); 
    }, timeout); 
    res.render('partials/404'); 
}); 

"finished"が出力されてから、エラーがスローされますが、コールバックで指定されたエラーは発生しません。

+0

あなたはapiでres.redirectを2回送信しています。あなたの最善の選択肢はおそらく部分的に404ページのタイムアウトを設定することです – Brian

答えて

2

この方法を使用することはできません。レンダリング手段はヘッダー付きのブラウザに送信され、HTTPリクエストはブラウザによって閉じられます。第2の応答を送信することはできません。

あなたはページ上のJavaScriptでタイムアウトロジックではなく、サーバーを行う必要があるでしょう:

<script> 
    var timeout = 3000; 

    setTimeout(function() { 
    window.location = "http://www.yoururl.com"; 
    }, timeout); 
</script> 
+0

魅力のように動作します。 – dlipovac012

+0

ありがとうございました。この回答を受け入れることができれば、それは感謝します。 – 7zark7

0

ユーザーが当たる権利たときに送信しようとしているリダイレクトがいずれかのサーバー側で実行する必要がありますサーバーで実行されるか、または404ページがロードされた後でブラウザで実行されます。

1

1回のリクエストに対して複数の応答を送信することはできません。誰かがあなたにハンバーガーを求めて、ハンバーガーを与えて、彼らが歩いて行くようなものです。しばらくして、別のハンバーガーを頭の後ろに突き出します。彼らはそれをキャッチするつもりはありません。

この場合、クライアント側でリダイレクトを処理する必要があります。これが通常のページレンダリングだけの場合は、metaタグのrefresh属性を使用できます。

<meta http-equiv="refresh" content="2; url=http://path/to/my/page/" /> 

これがAJAXリクエストの場合、遅れてクライアントがリダイレクトを実行する必要があります。

関連する問題