节点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访问,所以我不明白为什么要预先检查任何东西。

Interesting Posts