节点validation器和asynchronousvalidation
我正在研究我的第一个Node.js项目,并且偶然发现了一个问题。 我使用节点validation器进行inputvalidation,并使用Sequelize作为ORM。
asynchronousvalidation的问题
我正在尝试编写一些自定义validation,以查看给定的用户名是否仍然可用。 唯一的问题是:Sequelize中的查找器是asynchronous的,而node-validator没有内置的asynchronousvalidation支持。
我尝试了两种方法
- 使用这里描述的callback
- 使用Sequelize的内置validation
我对上述两种方法都不满意。 如果使用Sequelize的内置validation,使用callback将非常迅速,并且还有其他问题。
显然,在Sequelize中没有办法同步使用发现者,这将是我的解决之道。
现在怎么办?
我有什么select,以清洁的方式解决这个问题? 理想情况下,我想我的validation过程看起来像这样:
req.sanitize('username').trim(); req.check('username', 'Your username must be between 4 and 32 characters long').len(4, 32); req.check('username', 'That username is already taken').usernameIsAvailable();
我怎样才能干净地实现asynchronousvalidation? 感谢您的帮助!
你绝对不会find同步解决scheme。 节点是asynchronous的同义词。
我们大多数人处理回拨意大利面是使用1000 npm模块使用的asynchronous库。 https://github.com/caolan/async#series可以让你把这三个函数按顺序,就好像它们在同步运行一样。
然而,处理这个问题的最习惯的方式是在你的Sequelize模型(它已经包含节点validation器)中指定用户名要求,然后编写代码,当用户名已经存在时,将Sequelize错误报告给用户或者是无效的。 也就是说,Sequelize已经给你提供了对所有节点validation器函数的asynchronous访问,所以我不明白为什么要预先检查任何东西。