2017-05-31 6 views
0

私は今私がしばらくの間把握しようとしていた問題を抱えており、誰かが私を正しい方向に向けることができると願っていました。エクスプレスバリデータ。エラー変数がejs内で定義されていません

私がres.render {}オブジェクトに渡している変数(エラー)は、レイアウトファイル内で使用できません。問題は、参照エラーとして記録されます。

私はejsコードを取り出すと、私のエラーが端末に正しく記録されます。レイアウトファイル内で使用することができません。

以下は、layout.ejsコードの一部です。

<% for(var i = 0; i < errors.length - 1; i++){ %> 
    <li> <%= errors[i] %> </li> 
<% } %> 

とPOST ...

//POST route 
app.post('/articles/add', function(req, res){ 

    req.assert('title', 'Enter title').notEmpty(); 
    req.assert('author', 'Enter author').notEmpty(); 
    req.assert('body', 'Enter an article').notEmpty(); 

    //get errors 
    req.getValidationResult().then(function(err){ 


    if(err.isEmpty()){ 
     console.log(err); 
     res.render('add_article',{ 
     title: 'Add Article', 
     errors: err // <- 
     }); 
    } 

    else { 

     let article = new Article(); 
     article.title = req.body.title; 
     article.author = req.body.author; 
     article.body = req.body.body; 
     article.save(function(e){ 
     if(e) {console.log(e)} 
     else{ 
      req.flash('success', 'Article Added'); 
      res.redirect('/'); 

     } 
     }); 
    } 

    }); 

任意の助けてくれてありがとう。

答えて

0

あなたのコードには2つのバグがあります。最初に、if(err.isEmpty())、errが空の場合、errを送信しようとしています!もう1つはreq.getValidationResult()の使用で、結果はobjectではなく、arrayで解決されます。以下は、役に立つコードです。

//POST route 
app.post('/articles/add', function(req, res){ 

    req.assert('title', 'Enter title').notEmpty(); 
    req.assert('author', 'Enter author').notEmpty(); 
    req.assert('body', 'Enter an article').notEmpty(); 

    //get errors 
    req.getValidationResult().then(function(result){ 


    if(!err.isEmpty()){ 
     console.log(err); 
     res.render('add_article',{ 
     title: 'Add Article', 
     errors: result.array() // <- 
     }); 
    } 

    else { 

     let article = new Article(); 
     article.title = req.body.title; 
     article.author = req.body.author; 
     article.body = req.body.body; 
     article.save(function(e){ 
     if(e) {console.log(e)} 
     else{ 
      req.flash('success', 'Article Added'); 
      res.redirect('/'); 

     } 
    }); 
    } 

}); 

そしてresult.array()は次のように生成します。

[ 
    {param: "email", msg: "required", value: "<received input>"}, 
    {param: "email", msg: "valid email required", value: "<received input>"}, 
    {param: "password", msg: "6 to 20 characters required", value: "<received input>"} 
] 
関連する問題