Mongoose 中的校验器详解

阅读时长 5 分钟读完

Mongoose 是 Node.js 中最流行的 MongoDB ORM 库之一,它可以帮助我们更方便地操作 MongoDB 数据库。在 Mongoose 中,校验器是一个非常强大的工具,可以帮助我们确保数据的有效性。本文将详细介绍 Mongoose 中的校验器,包括校验器的基本用法、常用的校验器类型以及文档级和模型级校验器。

校验器的基本用法

在 Mongoose 中,我们可以在定义 Schema 时添加校验器:

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

如上所示,我们可以通过在 Schema 的字段定义中添加相关的校验器实现数据校验。

需要注意的是,我们可以在字段定义中添加一些 MongoDB 支持的基本校验器,如 requiredminmax 等。

常用的校验器类型

除了上面提到的基本校验器外,Mongoose 还支持多种自定义校验器,如 matchenumunique 等。以下是常用的校验器类型的详细说明:

match

match 校验器用于验证某个字段是否符合指定的正则表达式:

上述代码中,username 字段必须是由小写字母和数字组成的字符串。如果验证失败,将抛出 ValidationError 异常。

enum

enum 校验器用于验证某个字段的值是否在指定的范围内:

上述代码中,role 字段只能是 useradmin。如果验证失败,将抛出 ValidationError 异常。

unique

unique 校验器用于验证某个字段的值是否唯一:

上述代码中,email 字段必须是唯一的。如果验证失败,将抛出 MongoError 异常。

文档级和模型级校验器

除了在字段定义中添加校验器外,Mongoose 还支持文档级和模型级校验器。

文档级校验器

文档级校验器是指在保存文档之前对整个文档进行校验的方法。我们可以在 Schema 定义中添加一个 validate 属性来指定文档级校验器:

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

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

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

上述代码中,我们定义了一个文档级校验器,检查用户名是否为 admin。如果检查失败,将抛出 ValidationError 异常。

模型级校验器

模型级校验器是指在保存文档之前对整个集合进行校验的方法。我们可以在模型定义中添加一个静态方法来指定模型级校验器:

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

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

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

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

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

上述代码中,我们定义了一个模型级校验器,检查用户名是否已存在于数据库中。如果检查失败,将返回 false。注意,模型级校验器一般使用异步方法,因为它需要去查询数据库。

总结

本文对 Mongoose 中的校验器进行了详细的介绍,包括校验器的基本用法、常用的校验器类型以及文档级和模型级校验器。希望本文可以帮助您更好地理解 Mongoose 中的校验器,并在实际开发中更加灵活地使用它们。

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

纠错
反馈