表达验证者;错误变量未在ejs中定义

时间:2017-05-31 22:01:03

标签: javascript node.js express 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('/');

        }
      });
    }

  });

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

据我所知,您的代码中存在两个错误。首先,if(err.isEmpty()),当err为空时,你试图发送错误!!另一个是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>"}
]