2017-10-11 11 views
0

Expressをリロード滞在し続ける:アラートも後

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> 
<% }); } %> 

は、検証が失敗したときに警告メッセージを表示しようとしています。それは完璧に正常に動作します。しかし、ページが再ロードされると、エラーをnullにしてもアラートメッセージが表示されます。

+0

:のように別の変数にerrorsの値を複製してみてください。私は驚くべきことは何も記録しないだろうが、テンプレートが実際に動いていることを確認するのに役立つだろう。私はあなたが何らかのキャッシュ問題を見ているのかどうか疑問に思っています。 EJSに '<%= Date.now()%>'のようなものを入れて、ブラウザにキャッシュされたコピーが見えないことを確認することもできます。 – skirtle

答えて

0

res.renderを呼び出すと、実際にHTTPリクエストが終了するため、レンダリングが呼び出された後にreqまたはresに起こったことは、実際には起こりません。 `あなたのEJSファイルの<%はconsole.log(エラー)%>`を入れてみてください

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}); 
}); 
関連する問題