[Sequelize] 如何自定义校验器 validator/unique-validator

阅读时长 4 分钟读完

在 Sequelize 中,校验器是一个关键的部分,它用于验证传递给模型的数据是否有效。 Sequelize 自带有一些常见的校验器,比如 notEmptyisEmailisUrl 等等。同时,Sequelize 还允许用户自定义校验器。

在本文中,我们将介绍如何自定义一个校验器来检查字段是否唯一。我们将通过 validatorunique-validator 来展示这个过程。

validator 模块

validator 模块是 Node.js 中的一个独立的验证器库。它提供了各种验证函数,如字符串长度验证、电子邮件验证、URL 验证等等。我们可以使用它来验证传递给模型的数据。

如果你在项目中使用了 validator,那么你可以直接在模型中使用它来自定义校验器。

例如,检查邮箱是否唯一可以使用 validatorisEmailunique 函数来实现:

-- -------------------- ---- -------
----- --------- - ---------------------
----- - --------- - - ---------------------

----- ---- - ------------------------ -
  ------ -
    ----- -----------------
    ---------- ------
    --------- -
      -------- -----
      ----- ------------- -
        ----- ------ - ----- -------------- ------ - ------ ----- - ---
        -- -------- -
          ----- --- ------------ ------- ---------
        -
      --
    --
  --
---

在上面的例子中,我们在 validate 对象中定义了一个名为 unique 的自定义校验器。它使用了 validatorunique 函数来检查邮箱是否唯一,如果已经存在,那么就抛出一个错误。使用 asyncawait 关键字可以确保异步查询将在校验器函数之前执行。

unique-validator 模块

unique-validator 是一个 Node.js 的库,它扩展了 validator,添加了一个名为 isUnique 的函数,用于检查字段是否唯一。

使用 unique-validator 来自定义校验器非常简单。我们只需要在模型的定义中设置 validate 属性即可。

-- -------------------- ---- -------
----- --------- - ---------------------
----- --------------- - --------------------------------------

----- ---- - ------------------------ -
  ------ -
    ----- -----------------
    ---------- ------
    ------- -----
    --------- -
      -------- -----
    --
  --
-- -
  --------- -
    -------------------------- -
      --------------
        ------ - ------ ---------- --
      ------------ -- -
        -- ------ -
          ------ -------- ----------- ----- -- ------- -- --------
        -
        -------
      ---
    --
  --
---

----------- ------ ---- ---------- -- -
  -- ---- ----------
  ------------- ------ --------------- ---------- -- -
    --------------------- ---------------
  -------------- -- -
    -----------------
  --- 
---

在上面的例子中,我们在模型定义中设置了 unique 属性为 true,这将使 Sequelize 使用 unique-validator 校验器来验证该字段是否唯一。同时,我们还设置了 validate.checkEmailUniqueness 函数来验证字段的唯一性。

此函数将在 beforeValidate 钩子中执行,在保存模型之前进行检查。如果执行成功,则不会向存储系统中写入数据,并在控制台输出“Inserted Successfully”。

总结

自定义校验器能够让我们随心所欲地验证数据,并检查字段是否唯一。 上述两种自定义校验器都可以实现这个目标,仁者见仁智者见智,选择合适的方法才是最重要的。

学习 Sequelize 自定义校验器的过程将使我们更加熟悉 Sequelize,这对我们开发实际项目时将非常有用。希望这篇文章对你有所帮助!

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64870df548841e98945b9ac4

纠错
反馈