首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Express-Validator中的验证

Express-Validator中的验证
EN

Stack Overflow用户
提问于 2013-07-13 15:57:29
回答 3查看 18.2K关注 0票数 10

我正在使用express-validator进行验证。我使用mongoose作为数据库,它也有内置的验证功能。我想知道我应该使用哪一个?

我还想知道express-validator中的验证是否是并行的。以下面的代码为例:

代码语言:javascript
复制
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();

虽然在上面的代码中没有提到,但我也有一些其他的post请求,我需要验证多个字段,其中将在每个字段中进行数据库查询。

显然,我喜欢使用一个模块来并行运行它们,比如异步。我还想知道这些检查方法是否已经并行运行了?

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-13 16:46:30

express-validator用于验证浏览器/客户端传递的输入;Mongoose的验证用于验证新创建的文档。这两种方法都有不同的用途,因此没有明确的答案来说明应该使用哪一种方法;您甚至可以同时使用这两种方法。

至于验证的顺序:检查将按顺序执行。您可以使用async.parallel()使检查看起来像是并行执行的,但实际上并非如此,因为检查是同步的。

编辑node-validator (因此express-validator)是一个字符串验证器。唯一性测试不是字符串操作,而是对数据模型进行操作,因此您不应该尝试使用node-validator (实际上,我甚至不认为您可以)。

相反,我建议使用Mongoose的unique特性来确保电子邮件地址在数据库中只出现一次。

票数 10
EN

Stack Overflow用户

发布于 2017-03-06 01:15:04

同时使用mongodb unique约束和express-validator会导致一些复杂的错误处理:您需要分析不同位置的错误,并将其转换为rest响应的通用格式。因此,另一种方法是创建自定义快速验证器,它将在mongodb中找到具有以下值的记录:

代码语言:javascript
复制
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还支持异步验证,因此您可以执行所需的任何数据和字符串验证,而不会将用户验证和低级数据库后端验证混为一谈

票数 6
EN

Stack Overflow用户

发布于 2020-09-10 00:14:19

快速验证器无法检查电子邮件地址是否唯一,另一方面,MongoDB不负责检查您输入的电子邮件地址的格式是否正确。

因此,您必须在需要时同时使用它们,因为它们的用途完全不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17628206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档