Mongoose 中的数据校验详解

阅读时长 6 分钟读完

介绍

Mongoose 是 MongoDB(一种 NoSQL 数据库)的一个基于 Node.js 的 ORM(对象关系映射)框架,它提供了一种简单、直观的方式来操作 MongoDB 数据库。其中,数据校验是 Mongoose 的一个重要特性,它可以在数据存储之前对数据进行自定义、自动化的有效性校验,从而保证了数据的安全性和合法性。

本文将全面介绍 Mongoose 中的数据校验机制,从语法、类型、规则等多个角度进行解析和演示,帮助前端开发者更好地应用数据校验,并规避数据错误和漏洞。

Mongoose 数据校验语法

Mongoose 数据校验是通过在 Schema(数据模式)中设置属性的 validate 字段来实现的。语法结构如下:

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

其中,validator 属性用于设置自定义的校验函数,message 属性用于设置校验错误信息。下面我们将详细介绍 Mongoose 数据校验的各种类型和规则。

Mongoose 数据校验类型

于数据类型匹配的校验,Mongoose 支持以下类型和规则:

  • String
    • required:指定字符串为必选项。
    • enum:指定字符串必须是 enum 数组中的一个值。
    • match:指定正则表达式,字符串必须匹配该正则表达式。
    • minLengthmaxLength:指定字符串的最小和最大长度。
  • Number
    • required:指定数字为必选项。
    • minmax:指定数字的最小和最大值。
  • Date
    • required:指定日期为必选项。
  • Buffer
    • required:指定缓存为必选项。
  • Boolean
    • required:指定布尔值为必选项。
  • ObjectID
    • required:指定 ObjectID 为必选项。
  • Mixed
    • required:指定混合数据类型为必选项。
-- -------------------- ---- -------
----- ---------- - --- -----------------
  ----- -
    ----- -------
    --------- -----
    ----- --------- ------ ---------
    ------ ---------
    ---------- --
    ---------- --
  --
  ---- -
    ----- -------
    --------- -----
    ---- --
    ---- ---
  --
  ------ -
    ----- -----
    --------- ----
  --
  ------- -
    ----- -------
    --------- ----
  --
  ------- -
    ----- --------
    --------- ----
  --
  ---- -
    ----- ------------------
    --------- ----
  --
  ---- -
    ----- ----------------------------
    --------- ----
  -
--

自定义 Mongoose 数据校验规则

当 Mongoose 提供的校验规则无法满足业务需求时,我们可以自定义校验规则,例如:

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

上述例子中,我们在 phone 字段上自定义了一个校验规则,该规则要求所输入的号码必须是 11 位数字,并且必须通过正则表达式校验。

自定义校验规则的 validator 属性是一个验证函数,它的参数可以是单值、数组、对象或自定义类型等。返回值必须是布尔值,如果校验通过,则返回 true,否则返回 false。自定义校验规则的 message 属性是一个错误消息,当校验失败时会自动抛出异常并打印该错误消息。

在 Mongoose 数据校验中使用异步验证器

与其他编程领域一样,异步编程是 Mongoose 数据校验中的重要应用场景之一。异步校验器可以用于校验异步操作返回的数据,例如 API 请求、文件上传等,以确保数据的可靠性和安全性。

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

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

上述例子中,我们在 email 字段上定义了一个异步校验器 checkEmail,该校验器会在 5 秒钟后返回一个布尔值,并通过回调函数 cb 返回该值。在异步校验器内部,我们可以使用异步方法来校验数据,例如读取文件、发送邮件、访问 API 等。

需要注意的是,异步验证器必须包含一个回调函数,并在结束时调用该回调函数,否则将无法将验证结果返回给模型。如果将回调函数忘记调用,则可能会导致无法校验数据。例如,如果在上述例子中省略 cb(result),则无法校验该数据。

总结

Mongoose 中的数据校验有许多类型与规则,我们可以在数据模式中设置一些属性来实现对数据的校验。本文对 Mongoose 数据校验的不同类型及规则进行了解析,并且讲述了如何使用自定义的校验方式。最后,我们还介绍了异步校验器对我们编写更好的代码表现以及数据校验的必要性引起的体验性。希望本文对前端开发者有帮助。

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

纠错
反馈