2017-10-11 61 views
0

快遞後:警報就繼續即使重裝

router.get('/polls/new', isLoggedIn, (req, res) => { 
    res.render('new', {title: 'Create a new poll', route: 'new', isLoggedIn: req.isAuthenticated(), errors: req.session.errors}); 
    req.session.errors = null; 
}); 

router.post('/polls', isLoggedIn, (req, res) => { 
    req.check('title', 'Title must contain atleast 10 characters and must not exceed 100 charcters').isLength({min: 10, max: 100}); 
    var errors = req.validationErrors(); 
    console.log(errors); 
    if (errors) { 
     req.session.errors = errors; 
     res.redirect('/polls/new'); 
    } 

EJS:

<% if (errors) { %> 
<% errors.forEach((error) => { %> 
    <div class="alert alert-danger alert-dismissible fade show" role="alert"> 
     <button type="button" class="close alert-dismissible" data-dismiss="alert" aria-label="Close"> 
     <span aria-hidden="true">&times;</span> 
     </button> 
     <strong>Error!</strong> <%= error.msg %> 
    </div> 
<% }); } %> 

正在嘗試當驗證失敗時顯示警告訊息。它工作得很好。但是當頁面重新加載時,即使我將錯誤設置爲空,警報消息仍然顯示。

+0

嘗試把'<%的console.log(錯誤)%>'在EJS文件。我懷疑它會記錄任何令人驚訝的事情,但它應該有助於確認模板實際上運行。我想知道你是否看到某種緩存問題。您也可以在EJS中加入'<%= Date.now()%>'來幫助確認您沒有在瀏覽器中看到緩存副本。 – skirtle

回答

0

res.render的調用有效地結束了您的HTTP請求,因此在調用render之後發生的任何事情reqres將從未發生過。嘗試複製的errors值在另一個變量,如:

router.get('/polls/new', isLoggedIn, (req, res) => { 
    let err = req.session.errors; 
    req.session.errors = null; 
    res.render('new', {title: 'Create a new poll', route: 'new', isLoggedIn: 
     req.isAuthenticated(), errors: err}); 
});