2017-01-24 86 views
1

我是Node NodeJ新手。我使用快遞和護照。我也跟蹤數據​​庫中的當前用戶。重定向Node Js無法正常工作

目標是讓他們無法訪問其他數據。如果他們嘗試訪問其他數據,他們將被重定向到正確的數據頁面,並會收到來自connect-flash的消息提示。

下面是代碼:

app.get('/data/:dataPlace', isLoggedIn, function(req, res) { 
    if (req.user.dataPlace == req.params.dataPlace) { 
     res.render('data.ejs', { 
      user : req.user, 
      message: req.flash('dataDisplayMessage') 
     }); 
    } 
    else { 
     req.flash('dataDisplayMessage', 'OOOPS!'); 
     res.redirect('/data/' + req.user.dataPlace); 
    } 
}); 

這工作的大部分時間(即使使用鉻預取數據):

GET /data/asdasd 302 1.049 ms - 86 
GET /data/user 200 1.129 ms - 1639 

但是,在罕見的場合我會得到什麼樣這:

GET /data/asdasd 302 1.108 ms - 86 
GET /data/asdasd 302 1.989 ms - 86 
GET /data/user 200 2.769 ms - 1646 

第一個GET請求被引起通過鉻預取數據。除了像前一次直接重定向到'用戶'之外,它會掛起,直到我按下回車鍵,然後導致另一個'asdasd'GET請求,然後重定向到'user'。

這會導致消息顯示兩次! enter image description here 那麼,我是這樣做的正確方法嗎?爲什麼它顯示消息兩次?任何建議將不勝感激!

+0

是否做到這一點在其他瀏覽器?也許這是一個鉻合金問題?我知道我的Chrome預取存在問題 - 並非真正的問題,但是當您開發時,意外的請求會在嘗試查找問題時造成混淆。 – Kryten

+0

@Kryten我一直在用Safari瀏覽器嘗試它,看起來似乎無法重現相同的結果......如果沒有解決方法,這將會非常難過 – Zack

回答

0

看來這是一個Chrome問題。我的臨時解決方案是接受第一條錯誤消息。這只是只有一個特殊情況,因爲我只有一個錯誤消息在給定的時間顯示給用戶。 這不會是理想的,如果你有多個錯誤信息顯示,閃存刪除檢索一次

的代碼在EJS文件被修改的所有消息:

<% if (error.length > 0) { %> 
     <div class="alert alert-danger" role="alert"> 
      <%= error[0] %> 
     </div> 
<% } %>