2017-05-31 49 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

正如我看到你的代碼中有兩個錯誤。首先,if(err.isEmpty()),當錯誤是空的,那麼你正試圖發送錯誤!另一種是使用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>"} 
]