Express-validator不会发现错误

时间:2018-05-09 12:05:00

标签: node.js express express-session express-validator

在节点8.11.1中,表达4.16.3我安装了

"express-messages" : "*",
"connect-flash" : "*",
"express-validator" : "*",
"express-session" : "*"

我有一个页面可以获取所有文章app.get('/', function(req, res){....并且还有一个"新"按钮,用于添加新文章。点击New时,会出现一个弹出的Bootstrap表单。

我想检查空表单字段。我检查的HTML表单字段是

          <input type="text" name="name" id="name" class="form-control" />

表单的操作转到

const { check, validationResult } = require('express-validator/check');
app.post('/add', [check('name').exists()],
function(req, res) {
  const errors = validationResult(req);
  console.log(errors.isEmpty());
  if (!errors.isEmpty()) {
    req.flash('err', 'errors'); //test
    res.redirect('/');
   }
   else {
     pool.connect(function(err, client, done) {
       if (err) {
         return console.log('db connect error '+ err);
       }
       client.query('insert into event (name) values($1)',
       [req.body.name]);
       done();
       req.flash('success', 'saved');
       res.redirect('/');
     }); //pool connect
   }//else
});

我的总部设在this。无论我做什么,console.log(errors.isEmpty());始终为TRUE,所以我最终保存到我的DB空字段。那么,快递验证器不会发现错误?

此外,我不确定如何将errors传递回/路由,因此可以呈现错误,这就是我现在只使用req.flash('err', 'errors');的原因。我是否像成功部分一样使用req.flash

请帮我调试一下。谢谢

1 个答案:

答案 0 :(得分:2)

express-validator maintainer。

关于快速验证器,让空字符串通过

check()将为名为name的请求中的创建验证器链。
它没有声明字段的位置,例如可以是req.query.namereq.body.name。 如果您需要专门req.body,请使用其他链式创建者body()

然后,即使name中有req.body,请注意check('name').exists()未验证其内容。正如名字所说,它只是检查它是否存在 如果您想检查它是否包含某些内容,那么您可以使用check('name').not().isEmpty()

关于将错误传递到重定向页面

您可以拨打errors.array()errors.mapped()来解决实际错误(详情请查看Validation Result API)。

我还没有使用req.flash,因此您应该测试是否可以在那里传递JS对象,或者如果您只能传递字符串。 如果您必须使用字符串,那么JSON.stringify / JSON.parse应该是您的朋友来传输您的错误。