Sar*_*tra 10 validation asynchronous node.js express express-validator
我正在使用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();
Run Code Online (Sandbox Code Playgroud)
isUnique()是一种自定义验证方法,用于检查电子邮件是否尚未注册,它会向数据库查询以进行验证.虽然上面的代码中没有提到,但我还有其他一些帖子请求,我需要验证多个字段,在这些字段中将对每个字段进行数据库查询.
所以我想知道是否有可能并行运行上述每个检查方法,因为这会使它更快,并且我也会更像节点.我显然想使用一个模块来并行运行这些async.我还想知道这些检查方法是否已经并行运行了?
请帮我解决这个问题?提前致谢.
rob*_*lep 10
express-validator用于验证浏览器/客户端传递的输入; Mongoose的验证旨在验证新创建的文档.两者都有不同的用途,所以对于你应该使用哪一个,没有一个简洁的答案; 你甚至可以使用两者.
至于验证顺序:检查将按顺序执行.您可以使用async.parallel()它看起来好像检查是并行执行的,但实际上它们不会是因为检查是同步的.
编辑 :( node-validator因此express-validator)是一个字符串验证器.对唯一性的测试不是字符串操作,而是在您的数据模型上运行,因此您不应该尝试使用node-validator它(实际上,我甚至认为您不能).
相反,我建议使用Mongoose的unique功能来确保电子邮件地址只在数据库中出现一次.
或者,使用支持异步操作的验证器模块,例如async-validate.
使用mongodb unique约束express-validator并将导致一些复杂的错误处理:您需要分析不同位置的错误并将其转换为通用格式以进行休息响应.所以另一种方法是创建自定义快速验证器,它将在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(() => {
...
Run Code Online (Sandbox Code Playgroud)
如果您需要,请在我的网站上查看包含此代码的示例:https://maketips.net/tip/161/validate-username-available-using-express-validator
结论: express-validator支持异步验证,因此您可以执行所需的任何数据和字符串验证,而无需混合用户验证和低级数据库后端验证
| 归档时间: |
|
| 查看次数: |
16452 次 |
| 最近记录: |