我正在使用express-validator进行验证。我使用mongoose作为数据库,它也有内置的验证功能。我想知道我应该使用哪一个?
我还想知道express-validator中的验证是否是并行的。以下面的代码为例:
req.checkBody('email', 'Invalid email').notEmpty().isEmail().isUnique();
req.checkBody('password', 'Invalid possword').notEmpty().len(8, 30);
req.checkBody('first_name', 'Invalid first_name').notEmpty().isAlpha();
req.checkBody('last_name', 'Invalid last_name').notEmpty().isAlpha();
req.checkBody('dateofbirth', 'Invalid dateofbirth').notEmpty.isDate();虽然在上面的代码中没有提到,但我也有一些其他的post请求,我需要验证多个字段,其中将在每个字段中进行数据库查询。
显然,我喜欢使用一个模块来并行运行它们,比如异步。我还想知道这些检查方法是否已经并行运行了?
提前谢谢。
发布于 2013-07-13 16:46:30
express-validator用于验证浏览器/客户端传递的输入;Mongoose的验证用于验证新创建的文档。这两种方法都有不同的用途,因此没有明确的答案来说明应该使用哪一种方法;您甚至可以同时使用这两种方法。
至于验证的顺序:检查将按顺序执行。您可以使用async.parallel()使检查看起来像是并行执行的,但实际上并非如此,因为检查是同步的。
编辑:node-validator (因此express-validator)是一个字符串验证器。唯一性测试不是字符串操作,而是对数据模型进行操作,因此您不应该尝试使用node-validator (实际上,我甚至不认为您可以)。
相反,我建议使用Mongoose的unique特性来确保电子邮件地址在数据库中只出现一次。
发布于 2017-03-06 01:15:04
同时使用mongodb unique约束和express-validator会导致一些复杂的错误处理:您需要分析不同位置的错误,并将其转换为rest响应的通用格式。因此,另一种方法是创建自定义快速验证器,它将在mongodb中找到具有以下值的记录:
router.use(expressValidator({
customValidators: {
isUsernameAvailable(username) {
return new Promise((resolve, reject) => {
User.findOne({ username: username }, (err, user) => {
if (err) throw err;
if(user == null) {
resolve();
} else {
reject();
}
});
});
}
}
})
);
...
req.checkBody('username', 'Username is required').notEmpty();
req.checkBody('username', 'Username already in use').isUsernameAvailable();
req.asyncValidationErrors().then(() => {
...如果需要,请在我的网站上查看此代码的完整示例:https://maketips.net/tip/161/validate-username-available-using-express-validator
结论: express-validator还支持异步验证,因此您可以执行所需的任何数据和字符串验证,而不会将用户验证和低级数据库后端验证混为一谈
发布于 2020-09-10 00:14:19
快速验证器无法检查电子邮件地址是否唯一,另一方面,MongoDB不负责检查您输入的电子邮件地址的格式是否正确。
因此,您必须在需要时同时使用它们,因为它们的用途完全不同。
https://stackoverflow.com/questions/17628206
复制相似问题