Sequelize 中验证机制详解

阅读时长 5 分钟读完

Sequelize 是 Node.js 中一个非常流行的 ORM 库,它可以使我们更方便地操作数据库。然而,由于用户输入数据的不可控性,如果我们不加以限制,就会导致数据安全问题。因此,Sequelize 引入了验证机制,以保证数据库数据的合法性。

本文将详细地介绍 Sequelize 中的验证机制,包括验证选项、内置验证器、自定义验证器等,并提供代码示例以便读者更好地理解。

验证选项

在 Sequelize 中,我们可以在定义模型时为其添加验证选项,以控制其属性的数据类型、长度、取值范围等。常见的验证选项包括:

  • type:表示属性的数据类型,例如 Sequelize.STRING 表示字符串类型。
  • allowNull:表示属性是否允许为空,默认为 true
  • validate:表示属性的验证选项,可以是内置验证器或自定义验证器。

例如,下面是定义一个用户模型的代码示例:

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

在上面的代码中,usernamepassword 都是模型的属性,其中 username 添加了三个内置验证器,分别检查其是否为空、长度是否在 6 到 16 之间、是否由字母和数字组成。而 password 只添加了两个内置验证器,保证其非空且长度在 6 到 16 之间。

内置验证器

Sequelize 内置了许多验证器,我们可以通过添加 validate 选项来使用它们。下面是部分内置验证器的介绍:

  • notEmpty:检查字符串是否非空。
  • len:检查字符串长度是否在某个范围内。
  • is:使用正则表达式检查字符串是否匹配某种格式。
  • not:使用正则表达式检查字符串是否不匹配某种格式。
  • isEmail:检查字符串是否符合邮箱格式。
  • isUrl:检查字符串是否符合 URL 格式。
  • isInt:检查数字是否为整数。
  • isDecimal:检查数字是否为小数。

例如,我们可以使用 isEmail 验证器来检查邮箱格式是否正确:

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

自定义验证器

如果内置验证器无法满足需求,我们也可以自定义验证器。自定义验证器的语法与内置验证器类似,其值可以是一个数组或一个函数。如果是数组,则它的元素是一个对象,包含 msgargs 两个属性,分别表示验证失败时返回的错误信息和验证器使用的参数。如果是函数,则其参数为属性值和 Model 实例,并返回一个 Promise,如果返回的 Promise 被 reject,则验证失败,否则验证成功。

例如,下面是一个使用自定义验证器的例子,我们要检查用户名是否已被使用:

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

在上面的代码中,isUnique 验证器使用了 Model 类的 findOne 方法来查询用户名是否已存在,如果存在则抛出异常。

总结

通过本文的介绍,我们了解了 Sequelize 中的验证机制,包括验证选项、内置验证器和自定义验证器。验证机制可以有效地保证数据库数据的合法性和安全性。如果我们想要更好地使用 Sequelize,就需要熟悉和掌握这些验证机制。

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

纠错
反馈