10

我正在使用 express-validator 进行验证。我正在使用猫鼬作为数据库,它还内置了验证。我想知道我应该使用哪一个?

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

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

isUnique() 是一种自定义验证方法,用于检查电子邮件是否尚未注册,它会查询数据库以进行验证。虽然在上面的代码中没有提到,但我也有一些其他的发布请求,我需要验证多个字段,其中每个字段都会进行数据库查询。

所以我想知道是否有可能并行运行上述每个检查方法,因为这会使其更快,并且我也会更喜欢节点。我显然想使用一个模块来像异步一样并行运行这些模块。我还想知道这些检查方法是否已经并行运行?

请帮我解决这个问题?提前致谢。

4

3 回答 3

10

express-validator旨在验证浏览器/客户端传递的输入;Mongoose 的验证旨在验证新创建的文档。两者都有不同的用途,因此对于您应该使用哪个没有明确的答案。你甚至可以同时使用两者。

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

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

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

或者,使用支持异步操作的验证器模块,例如async-validate.

于 2013-07-13T08:46:29.653 回答
6

既使用mongodbunique约束,express-validator又会造成稍微复杂的错误处理:需要对不同地方的错误进行分析,并将其转换为通用格式,以便进行rest响应。因此,另一种方法是创建自定义快速验证器,它将在 mongodb 中找到具有此类值的记录:

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也支持异步验证,因此您可以执行所需的任何数据和字符串验证,而无需混合用户验证和低级数据库后端验证

于 2017-03-05T17:15:04.000 回答
0

Express-Validator 无法检查电子邮件地址是否唯一,另一方面,MongoDB 不负责检查您输入的电子邮件地址的格式是否正确。

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

于 2020-09-09T16:14:18.997 回答