Mongoose 的验证器详解

阅读时长 6 分钟读完

Mongoose 是一款流行的 Node.js ODM(对象文档映射)库,用于在 Node.js 中与 MongoDB 进行交互。其中,验证器是 Mongoose 重要功能之一。在本文中,我们将深入探讨 Mongoose 的验证器,讲解其详细用法,并提供一些示例代码。

什么是验证器?

验证器用于在 Mongoose 中检查模型属性是否有效。在模型保存之前,Mongoose 会自动调用配置的验证器函数进行验证。如果验证失败,Mongoose 将拒绝对象的保存,并返回错误。

Mongoose 支持许多类型的验证器。其中包括内置的类型和自定义类型。用户可以根据需要选择合适的验证器。

内置验证器

Mongoose 内置了许多验证器,这些验证器可以应用于任何类型的字段。下面介绍一些内置验证器。

必需性(required)

必需性验证器可以检查一个字段是否必须存在。如果该字段不存在,则 Mongoose 将产生一个错误。

最小长度(minlength)

最小长度验证器可以检查一个字段的最小长度。如果字段的长度不足,则 Mongoose 将产生一个错误。

最大长度(maxlength)

最大长度验证器可以检查一个字段的最大长度。如果字段的长度超过限制,则 Mongoose 将产生一个错误。

正则表达式(match)

正则表达式验证器可以检查一个字段是否匹配特定的正则表达式。如果字段无法匹配,则 Mongoose 将产生一个错误。

枚举(enum)

枚举验证器可以检查一个字段是否在特定的选项列表中。如果该字段的值不在列表中,则 Mongoose 将产生一个错误。

自定义验证器

除了内置验证器,Mongoose 还支持用户定义验证器。自定义验证器可应用于任意字段类型。下面介绍自定义验证器的方法。

用户可以使用 Schema.path() 函数来定义验证器。该函数需要路径名和函数作为参数。路径名是指要验证的字段名称,函数是指要执行的验证函数。

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

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

在上面的例子中,validateZipCode 函数用于验证邮政编码。它返回一个 true/false 值,用于确定该字段是否有效。如果该字段无效,则函数返回相应的错误信息。

预定义错误信息

在上面的示例中,我们在定义自定义验证器时,将错误信息作为数组传递给 validate 参数。但是,Mongoose 还提供了一些预定义的错误信息,可以在自定义验证器中使用。

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

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

在这个例子中,我们定义了一个 zipCodeValidation 对象,包括 validatormessage 属性。validator 属性指向验证函数。message 属性包含错误信息,其中的 {VALUE} 占位符将被有效的值替换。

实用提示

使用 Mongoose 验证器时,有些实用的提示可以使用。下面列举一些有用的提示。

this 引用

在定义自定义验证器时,可以使用 this 引用表示验证器正在验证的对象。例如:

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

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

在上面的示例中,我们可以使用 this.dob 来引用生日字段。

异步验证

有时候,验证函数需要异步执行,例如,验证一个电子邮件地址是否已经存在于数据库中。在这种情况下,可以通过将验证函数返回一个 Promise 来实现异步验证。

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

在上面的示例中,我们验证了 email 字段是否已经存在于数据库中。我们返回一个 Promise,当数据库查询结束时,解析 Promise 并根据结果返回 true 或 false。

结论

Mongoose 验证器是一项重要功能,它可以确保模型属性的有效性,并提供有用的错误信息。本文提供了一些内置验证器和自定义验证器的示例,并讲解了一些实用提示。希望本文可以为您的 Mongoose 开发提供一些帮助。

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

纠错
反馈