在Express-Validator中validation
我正在使用快速validation器进行validation。 我正在使用mongoose数据库,它也有内置的validation。我想知道我应该使用哪一个?
我也想知道express-validator中的validation是否平行。 以此代码为例:
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();
isUnique()是一个自定义validation方法,用于检查电子邮件是否已经被注册或者没有被注册,它会向数据库查询以进行validation。 虽然没有在上面的代码中提到,但我也有其他几个请求后,我需要validation多个字段,其中每个数据库查询将在其中进行。
所以我想知道是否可以并行运行上面的每一个检查方法,因为这样做会更快,也会让我更喜欢。 我显然会喜欢使用一个模块来并行运行这些像asynchronous。 我也想知道这些检查方法是否已经并行运行?
请帮我弄清楚这个? 提前致谢。
express-validator
是为了validation浏览器/客户端传递的input。 mongoose的validation是为了validation新创build的文件。 两者都有不同的目的,所以对于你应该使用哪一个,没有一个明确的答案。 你甚至可以使用两者。
至于validation的顺序:检查将连续进行。 您可以使用async.parallel()
使它看起来好像检查是并行执行的,但实际上它们将不会被执行,因为检查是同步的。
编辑 : node-validator
(因此express-validator
)是一个stringvalidation程序。 唯一性testing不是string操作,而是在您的数据模型上运行,所以您不应该尝试使用node-validator
(实际上,我甚至不认为您可以 )。
相反,我会build议使用Mongoose的unique
function,以确保电子邮件地址只出现一次在您的数据库中。
或者,使用支持asynchronous操作的validation程序模块,如async-validate
。
使用mongodb unique
约束和express-validator
会导致一些复杂的error handling:您需要分析不同地方的错误,并将其转换为通用格式以获得rest响应。 所以另一种方法是创build自定义的快速validation器,它将在mongodb中查找具有这样的值的logging:
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
支持asynchronousvalidation,所以你可以执行任何你需要的数据和stringvalidation,而不需要混合用户validation和低级数据库后端validation