2016-10-17 76 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兩次。你最好的選擇可能是設置部分404頁面 – Brian

回答

2

你不能使用這種方法 - 渲染意味着發送到瀏覽器的頭部,然後HTTP請求被瀏覽器關閉。您無法發送第二個回覆。

你必須做的超時邏輯在JavaScript的網頁上,而不是服務器:

<script> 
    var timeout = 3000; 

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

的超時工作就像一個魅力。謝謝 – dlipovac012

+0

太好了,如果你能接受這個答案會很感激。 – 7zark7

0

權當用戶點擊你要發送重定向應該做到無論在服務器端服務器,或者在404頁面加載後在瀏覽器上完成。

1

您無法向單個請求發送多個回覆。就像有人問你一個漢堡,你給他們一個漢堡,然後他們走開了。過了一段時間,你會在他們的腦後再擲一個漢堡。他們不會去捕捉它。

在這種情況下,您需要處理客戶端重定向。如果這只是一個普通的頁面呈現,您可以使用meta標記的refresh屬性。

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

如果這是一個AJAX請求,您需要讓客戶端在延遲後執行重定向。