簡體   English   中英

node-express 重定向過多

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM