2

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

异步验证的问题

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

我尝试过的两种方法

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

显然,没有办法在 Sequelize 中同步使用查找器,这将是我的首选解决方案。

现在怎么办?

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

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

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

4

1 回答 1

1

您肯定不会找到同步解决方案。Node 是异步的同义词。

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

然而,处理这个问题的最惯用的方法是在你的 Sequelize 模型(它已经包括节点验证器)中指定用户名要求,然后当用户名已经存在时,编写代码向用户报告 Sequelize 错误或无效。也就是说,Sequelize 已经为您提供了对所有节点验证器功能的异步访问,所以我真的不明白您为什么要预先检查任何东西。

于 2013-07-28T12:39:41.020 回答