Mongoose Schema 中的 Validators 详解

阅读时长 4 分钟读完

什么是 Mongoose Schema?

Mongoose 是 Node.js 中最流行的和最成熟的 ODM(Object Document Mapping)数据库库之一,它能够帮助开发者通过定义 Schema(数据结构)和 Model(数据模型类)来操作 MongoDB 数据库。

Mongoose 提供了许多强大的功能,其中一个很有用的功能是 Validators(验证器)。通过 Validators,我们可以在定义 Schema 字段时,添加验证规则来确保数据的有效性。接下来,我们将详细介绍 Mongoose 中 Validators 的使用方法。

Validators 的使用

常用的 Validators 类型

Mongoose 提供了多种类型的 Validators,以下是其中一些常用的 Validators:

  • required:表示该字段必填,如果该字段为空,Mongoose 将会抛出一个 ValidationError 异常。
  • enum:表示该字段必须是一个枚举值中的一个,如果该字段的值不在枚举值中,Mongoose 将会抛出一个 ValidationError 异常。
  • match:表示该字段必须满足指定的正则表达式,如果该字段的值与正则表达式不匹配,Mongoose 将会抛出一个 ValidationError 异常。
  • min:表示该字段的值必须大于或等于指定的最小值,如果该字段的值小于最小值,Mongoose 将会抛出一个 ValidationError 异常。
  • max:表示该字段的值必须小于或等于指定的最大值,如果该字段的值大于最大值,Mongoose 将会抛出一个 ValidationError 异常。
  • validate:表示该字段必须通过自定义 Validator 函数才能合法。

在 Schema 中定义 Validators

我们可以通过在 Schema 中定义 Validators 来确保数据的有效性。在下面的代码中,我们定义了一个名为 User 的 Schema,其中包含了两个字段,分别是 name 和 age。我们通过 required 和 min Validators 来确保这两个字段的有效性。如果其中一个字段未填或值小于 18,Mongoose 将会抛出一个异常。

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

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

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

自定义 Validators

有时我们需要对数据进行更复杂的验证,这时我们可以使用自定义 Validators。

在下面的例子中,我们定义了一个名为 email 的字段,该字段必须通过一个自定义的邮箱验证函数来确保其合法性。如果该字段不合法,Mongoose 将会抛出一个异常。

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

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

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

总结

通过 Validators,我们可以在定义 Mongoose Schema 字段时快速且方便地定义验证规则来确保数据的有效性。同时,自定义 Validators 可以让我们更加灵活地进行数据验证。使用 Validators 可以有效地避免数据不一致的问题,提高系统的健壮性和可维护性。

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

纠错
反馈