[英]node-express too many redirects
我的路線設置如下
當我導航到“ http://localhost/ ”時,我收到一條錯誤消息,提示“localhost 將您重定向了太多次”並且頁面的 URL(顯示在瀏覽器的 URL 欄中)是http://localhost/!/儀表板- 所以它看起來確實被重定向了,但我不明白為什么它會陷入無限循環
// Public Routes
app.use('/', function(req,res){
res.redirect('/!/dashboard');
});
app.use('/login', routes.login);
app.use('/!/dashboard', isLoggedIn, routes.dashboard);
// Check If Logged In
function isLoggedIn(req,res,next){
if (req.isAuthenticated()){
return next();
} else {
res.redirect('/login');
}
};
你不應該使用app.use('/', ...)
,因為它將匹配任何以/
開頭的 URL。
相反,使用app.all
:
app.all('/', function(req,res){
res.redirect('/!/dashboard');
});
app.use('/login', routes.login);
app.use('/!/dashboard', isLoggedIn, routes.dashboard);
經典錯誤將出現在Apache / Nginx的配置中。 在您的代碼中,您似乎使用端口80,我相信您沒有使用它,因此您將通過Apache或Nginx代理您的請求。
(不能發表評論,即使這是一個糟糕的答案,我會在進一步的評論中相應更新)
實際上,當網站創建重定向循環時,就會發生這種類型的錯誤。 一個重定向導致另一個重定向並創建一個鏈,該鏈在循環中重定向回自身,並在不同地址之間無限引導用戶。
例如,看看這個處理 url '/users/sign_in' 請求的控制器:
module.exports.sign_in=(req,res)=>{
if(req.isAuthenticated())
{
return res.redirect('/question/all_questions');
}
return res.redirect('/users/sign_in');
}
所以在這里,當用戶想要登錄時,這段代碼會處理那個請求。在這段代碼中,我們首先檢查用戶是否登錄。如果用戶已經登錄,那么我們可以重定向到給定的 url 作為“/問題/所有問題”。
但是如果用戶沒有登錄,那么我們再次發送請求'/users/sign_in',然后再次檢查用戶是否登錄,如果沒有登錄,則再次發送請求'/users/sign_in' .所以你清楚地看到,如果用戶還沒有登錄,它實際上會創建一個無限循環。所以當這種情況發生時,瀏覽器會自動打破這個無限循環,並給出“重定向太多”的錯誤。 所以要解決這個問題而不是寫
return res.redirect('/users/sign_in');
我們必須將頁面呈現為
return res.render('sign_in');
而不是重定向 url 並創建無限循環。
所以我認為你必須仔細查看你的代碼,是否有任何 inifinte 循環被創建,我正在上面討論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.