Mongoose 中的校验规则详解

在 MongoDB 的 Node.js 驱动程序之一的 Mongoose 中,模型(即所谓的 Schema,或预定义的结构)可以定义各种校验规则,以确保数据的完整性和正确性。在本文中,我们将深入探讨 Mongoose 的校验规则,涵盖各种表单验证、业务逻辑限制以及定制校验器的示例和指导。

基本校验规则

下面是一些最常见的字段校验规则:

  • required:必填字段。例如,我们可以这样定义一个用户名字段:username: { type: String, required: true },这样在尝试插入一个缺少用户名的文档时,会收到如下错误:ValidationError: Path username is required.
  • min / max:限制数字或日期的最小或最大值。例如:age: { type: Number, min: 18 },限制年龄字段的最小值为 18。
  • enum:限制字段只能是指定的值之一。例如:gender: { type: String, enum: ['Male', 'Female'] },在这个示例中,gender 字段必须为男性或女性之一。
  • match:使用正则表达式验证字段的格式。例如,我们可以这样限制用户名只能包含小写字母和数字:username: { type: String, match: /^[a-z0-9]+$/ }

当未满足定义的校验规则时,Mongoose 会抛出一个 ValidationError 异常。

高级校验规则

除了上述基本校验规则之外,Mongoose 还提供了一些更高级的校验规则。

自定义校验器

由于 Mongoose 的校验规则是开放的,因此您可以编写自己的校验器,以验证字段并执行各种其他操作。例如,以下示例定义了一个 caption 字段,以确保它在评论中唯一(即每个评论都有唯一的标题):

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

上面的示例中,将 validate 属性设置为一个字面量对象,该对象具有 validator 函数,该函数接受待验证的值并返回一个解析为 true 或 false 的 Promise。此外,还有一个可选的 message 属性,用于在验证失败时提供更具体的错误消息。

异步校验规则

Mongoose 甚至允许您使用异步函数来实现您的自定义校验器。例如,以下示例定义了一个 username 字段,以确保该用户名不存在于数据库中:

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

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

在上述示例中,我们定义了一个名为 validator 的常规异步函数,并在 validate 属性中使用它。这种用法基本上是将异步函数作为一个选项传递给对象,同时允许使用选项中定义的其他任何属性。

正则表达式校验规则

Mongoose 还可以使用“string”类型字段的正则表达式进行验证,就像使用 JavaScript 原生的 RegExp 对象一样。例如,以下示例校验一个 URL 字段:

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

在上述示例中,我们定义了一个正则表达式来验证 URL,如果该字符串与正则表达式匹配,则该字段将被视为经过验证。

结论

在本文中,我们介绍了 Mongoose 中的基本和高级校验规则,并提供了各种示例和指导。了解和正确使用这些规则是保证数据完整性和正确性的关键,同时可以节省大量的调试和错误处理时间。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6704e8eed91dce0dc850be5d