节点验证器和异步验证

时间:2013-07-26 10:52:49

标签: javascript node.js validation express sequelize.js

我正在开发我的第一个Node.js项目,我偶然发现了一个问题。我正在使用node-validator进行输入验证,将Sequelize用作ORM。

异步验证的问题

我正在尝试编写一些自定义验证,以查看给定的用户名是否仍然可用。唯一的问题是:Sequelize中的finders是异步的,而node-validator没有内置的异步验证支持。

我尝试了两种方法

我对上述两种方法都不满意。如果我使用Sequelize的内置验证,使用回调会很快变得混乱,还有其他问题。

显然,在Sequelize中没有办法同步使用finder,这本来是我的解决方案。

现在怎么办?

我有什么选择以干净的方式解决这个问题?理想情况下,我希望我的验证过程看起来像这样:

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();

如何干净地实现异步验证?谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

你绝对不会找到同步解决方案。 Node与异步同义。

我们大多数人处理回调意大利面的方式是使用异步库,1000 npm模块使用它。 https://github.com/caolan/async#series将允许您按顺序放置这三个函数,就好像它们是同步运行一样。

然而,处理该问题的最常用的方法是在Sequelize模型中指定用户名要求(已包含节点验证器),然后编写代码以将Sequelize错误报告给用户,当用户名已存在或无效。也就是说,Sequelize已经为您提供了对所有节点验证器功能的异步访问,因此我无法真正理解您为什么要预先检查任何内容。