如何检查快速验证器中的字段是否唯一?

Oli*_*ver 0 javascript validation unique node.js express

我需要使用快速验证器或其他技术(对此来说是新的,所以我需要检查某个字段是否是唯一的(在之前的帖子中没有相同的名称,因此在数据库中当前没有与此相同的其他名称)不知道最好的方法)在 Node.js 的端点内。

我当前的代码是:

MainRouter.post('/animals', [
     check('name')
         .isAlpha()
         .notEmpty()
         .withMessage("The name should contain only letters and should be unique."),
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
        return res.status(400).send({errors: errors.array()});
    }

    AnimalPost.postAnimal(req.body).then(message => {
        return res.json(message);
    }).catch((error) => {
        return res.json(404, error);
    });
});
Run Code Online (Sandbox Code Playgroud)

例如:当我发布一个新名称(例如“ChloeGiraffe”)时,它应该是唯一的,因为它当前不存在于数据库中,可能如下所示:

  • 海豚多利
  • 大象艾丽
  • 猴子米特
  • 龟忍者

因此,ChloeGiraffe 已经过验证,可以发布了。否则,如果它已经存在,则会显示错误。

我不知道这是否重要,因为工作是在端点内完成的,但如果重要的话,我会将所有信息保存在 Excel 工作表中;我不使用 MangoDB。

POST 本身是有效的,它只是关于唯一性的验证/检查。

我怎样才能做到这一点?请让我知道是否有另一种所需的方法是我的,如果错误,我找不到与此相关的任何有用信息。非常感谢您!

Sha*_*Jha 5

使用custom()验证规则

check('name')
         .isAlpha()
         .notEmpty()
         .withMessage("The name should contain only letters and should be unique.")
         .custom(value => {
            return AnimalPost.findOne({ where: {name: value} })
               .then(() => {
                  return Promise.reject('Name already taken')
               })
         }),
Run Code Online (Sandbox Code Playgroud)

查找查询可以根据您的 ORM 进行更改,上面的查询是通过记住您使用了 sequeulize ORM 来编写的