初学者必学:Mongoose 数据验证实践

阅读时长 5 分钟读完

为了确保数据的正确性和完整性,在前端开发领域中,数据验证是必不可少的一环。在 Node.js 中,使用 Mongoose 数据库可以方便地进行验证。Mongoose 是一个操纵 MongoDB 数据库的对象模型工具,可以在 Node.js 中对数据库进行 CRUD 操作。

本文将详细介绍 Mongoose 数据验证的实践。您将学习到如何在 Mongoose 中定义模式以及如何使用内置验证器和自定义验证器来确保数据的正确性和完整性。

Mongoose 数据验证

Mongoose 提供了内置的验证器,可以简单地定义验证规则,例如 requiredminlengthmaxlength 等。 在定义模式(Schema)时,可以使用这些验证器来验证数据。以下是一些常见的验证器:

  • required:该字段必须存在。
  • maxlength:该字段限制的最大字符数。
  • minlength:该字段限制的最小字符数。
  • enum:该字段只能是预定义的值之一。
  • match:该字段必须符合正则表达式模式。
  • validate:自定义验证器。

下面是一个 Mongoose 模式定义的示例,其中运用了一些验证器:

在上面的代码中,我们定义了一个用户模式(userSchema),其中包含了三个字段(name,email 和 password)。每个字段都有自己的验证器。

接下来,让我们来看看如何使用 Mongoose 内置的验证器,以及如何编写自定义验证器。

内置验证器

在 Mongoose 中,有一些常用的内置验证器,如 requiredminlengthmaxlength。下面我们将通过一个简单的示例演示如何使用这些内置验证器。

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

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

在上面的代码中,我们定义了一个嵌套模式(childSchema),该模式包含了两个字段 nameagename 字段必须存在,并且长度必须介于 2 和 50 之间。age 字段是可选的,必须大于等于 0,小于等于 18。

parentSchema 是一个包含嵌套模式的模式,其中 name 字段也必须存在。children 是一个由 childSchema 定义的子文档数组。您可以在 Mongoose 文档中找到更多关于嵌套文档的信息。

使用内置验证器非常简单。当您尝试保存不符合验证规则的文档时,Mongoose 将抛出一个错误。通过以下代码演示:

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

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

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

在上面的代码中,我们尝试保存一个 Parent 文档。这个文档包含一个名为 “张三” 的父亲和两个孩子的数组。其中,一个孩子的 name 字段是空的,导致验证失败。因此,Mongoose 将抛出一个错误,防止保存该文档。

自定义验证器

在 Mongoose 中,您还可以使用自定义验证器来确保数据的正确性。这样,您就可以轻松地定义自己的验证规则。 在使用自定义验证器时,您需要处理两个参数:

  • value:该字段要验证的值。
  • callback:必须调用该回调,以便 Mongoose 知道验证器已完成。

下面是一个示例自定义验证器,用于验证电子邮件地址是否唯一:

在上面的代码中,我们定义了一个自定义验证器,用于验证电子邮件地址是否唯一。首先,验证器会尝试查找数据库中是否已存在具有该电子邮件地址的用户。 如果找到了一个用户,验证器将调用回调并将参数设置为 false,表示验证器失败。否则,它将调用回调并将参数设置为 true,表示验证器通过。最后,我们在验证器中指定了一个错误消息,以便在验证失败时使用。

可以使用多个自定义验证器。 在这种情况下,验证器将按照它们在模式中定义的顺序按顺序运行。如果一个验证器失败,则不会运行下一个验证器。因此,在上面的示例中,如果数据库中存在具有相同电子邮件地址的用户,则不会运行下一个验证器。

结论

在本文中,我们介绍了 Mongoose 数据验证的实践,包括了内置验证器和自定义验证器。我们还演示了如何在模式中定义这些验证器,以确保数据的正确性和完整性。希望这些信息将对您的下一个 Node.js 项目有所帮助!

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

纠错
反馈