Mongoose 中如何使用 Validation 来约束数据的格式及有效性

阅读时长 6 分钟读完

在开发项目的过程中,经常需要约束用户输入的数据。Mongoose 是 Node.js 中流行的 MongoDB ODM(对象文档映射),它提供了方便的数据格式定义和数据验证功能,使得开发者可以轻松地约束数据格式及有效性。本文将详细讲解 Mongoose 中如何使用 Validation 来约束数据的格式及有效性,并提供示例代码。

数据格式定义

在 Mongoose 中定义数据格式,需要使用 SchemaModel 两个对象。Schema 定义了一个数据模型的结构,包括字段名、数据类型、验证器等信息。Model 是一个操作数据库的抽象类,它与数据模型相关联,通过操作数据模型的实例来对数据库进行操作。

定义数据格式的一个示例:

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

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

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

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

在上面的示例中,定义了一个 User 的数据模型,包括 usernamepasswordemail 三个字段。其中,usernameemail 都是必填项,并且在数据库中是唯一的,password 的最小长度为 8。email 使用了正则表达式进行匹配验证。这里只是一个简单的示例,实际项目中可以根据需求对数据模型进行更加丰富和复杂的定义。

数据验证器

在 Mongoose 中,数据验证器是用于验证数据有效性的函数。当保存数据时,Mongoose 会自动检测数据是否符合数据模型中所定义的验证规则,如果不符合会抛出错误。以下是 Mongoose 内置的一些验证器:

  • required: 指定是否必填,值为 truefalse
  • default: 指定默认值。
  • min/max: 验证数值的最小值和最大值。
  • minlength/maxlength: 验证字符串的最小长度和最大长度。
  • enum: 验证字符串是否在指定的枚举列表中。
  • match: 使用正则表达式验证字符串是否匹配。
  • validate: 自定义验证器函数,需要返回布尔值或者一个 Promise。

以下是一个示例,使用了 minlengthmaxlengthmatch 三个验证器:

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

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

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

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

在上面的示例中,title 必填,且长度在 5 到 50 之间,content 也必填,且长度不能小于 10。在 author 字段中,使用了 Schema.Types.ObjectId 类型,表示与 User 模型相关联。这里没有使用 match 验证器,读者可以自行添加。

自定义数据验证器

Mongoose 的自定义验证器允许我们编写自己的验证函数来验证数据的有效性,非常方便。例如,下面的代码演示了如何使用自定义验证器来验证数据的合法性:

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

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

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

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

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

在上面的例子中,定义了一个 Cart 数据模型,其中 products 是一个数组类型,其中每个元素有 productIdquantity 两个属性。我们需要验证 products 数组的长度是否超过 100,如果超过则报错。这里使用了自定义验证器 productsLimit,它返回数组长度是否小于等于 100。在 cartSchemaproducts 属性中,使用了 validate 验证器,它需要传递两个参数,一个是验证函数,第二个则是验证失败时要显示的错误信息。如果验证函数返回 false,则会抛出错误信息。

总结

本文介绍了 Mongoose 中 Validation 的使用方法,包括数据格式定义、字段约束和自定义验证器等。使用 Mongoose Validation 可以轻松地约束数据格式及有效性,从而保证数据的安全性和正确性。了解了 Mongoose Validation 的基本用法,读者可以在实际项目中自行应用。

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

纠错
反馈