在节点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
?
请帮我调试一下。谢谢
答案 0 :(得分:2)
express-validator maintainer。
check()
将为名为name
的请求中的创建验证器链。
它没有声明字段的位置,例如可以是req.query.name
或req.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
应该是您的朋友来传输您的错误。