Mongoose 是一个 Node.js 的 MongoDB 驱动程序,它提供了一种方便的方式来定义和操作 MongoDB 的数据模型。在使用 Mongoose 的过程中,我们经常需要对数据进行验证,以确保数据的正确性和完整性。本文将介绍如何使用 Mongoose 验证 MongoDB 的模型数据。
定义模型
在使用 Mongoose 验证数据之前,我们需要先定义数据模型。下面是一个简单的例子:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ---------- - --- ----------------- ----- - ----- ------- --------- ---- -- ---- - ----- ------- ---- ---- -------- ---- ----- ------- -- ------ - ----- ------- --------- ----- ------- ----- ------ ---------------------------------- -- --------- - ----- ------- --------- ----- ---------- --- -------- ---------- ---- ------- - --- ----- ---- - ---------------------- ------------ -------------- - -----
在上面的代码中,我们定义了一个名为 User 的模型,它包含了 name、age、email 和 password 四个字段。其中,name 和 email 是必填字段,age 必须在 18 到 120 之间,email 必须符合电子邮件的格式,password 的长度必须在 6 到 20 之间。
数据验证
在使用 Mongoose 保存数据时,Mongoose 会自动进行数据验证。我们可以在模型定义中使用各种验证器来定义如何验证数据。
必填字段验证
在上面的例子中,我们使用了 required 验证器来确保 name 和 email 字段是必填的。如果我们试图保存一个不包含 name 或 email 字段的文档,Mongoose 将会抛出一个 ValidationError。下面是一个例子:
-- -------------------- ---- ------- ----- ---- - ------------------------- ----- ---- - --- ------ ---- --- ------ ------------------- --------- -------- --- ----------- -------- -- - -------------------- -- -------------- -- - --------------------------- ---
在上面的代码中,我们试图保存一个不包含 name 字段的用户文档。由于 name 字段是必填字段,Mongoose 将会抛出一个 ValidationError,提示我们 name 字段是必填的。
值范围验证
在上面的例子中,我们使用了 min 和 max 验证器来确保 age 字段的值在 18 到 120 之间。如果我们试图保存一个年龄小于 18 或大于 120 的文档,Mongoose 将会抛出一个 ValidationError。下面是一个例子:
-- -------------------- ---- ------- ----- ---- - ------------------------- ----- ---- - --- ------ ----- ----- ---- --- ------ ------------------- --------- -------- --- ----------- -------- -- - -------------------- -- -------------- -- - --------------------------- ---
在上面的代码中,我们试图保存一个年龄小于 18 的用户文档。由于 age 字段的值不在 18 到 120 之间,Mongoose 将会抛出一个 ValidationError,提示我们年龄太小。
正则表达式验证
在上面的例子中,我们使用了 match 验证器来确保 email 字段符合电子邮件的格式。如果我们试图保存一个不符合电子邮件格式的文档,Mongoose 将会抛出一个 ValidationError。下面是一个例子:
-- -------------------- ---- ------- ----- ---- - ------------------------- ----- ---- - --- ------ ----- ----- ---- --- ------ ------- --------- -------- --- ----------- -------- -- - -------------------- -- -------------- -- - --------------------------- ---
在上面的代码中,我们试图保存一个 email 字段不符合电子邮件格式的用户文档。由于 email 字段不符合电子邮件格式,Mongoose 将会抛出一个 ValidationError,提示我们 email 不符合格式。
字符串长度验证
在上面的例子中,我们使用了 minlength 和 maxlength 验证器来确保 password 字段的长度在 6 到 20 之间。如果我们试图保存一个长度小于 6 或大于 20 的文档,Mongoose 将会抛出一个 ValidationError。下面是一个例子:
-- -------------------- ---- ------- ----- ---- - ------------------------- ----- ---- - --- ------ ----- ----- ---- --- ------ ------------------- --------- ----- --- ----------- -------- -- - -------------------- -- -------------- -- - --------------------------- ---
在上面的代码中,我们试图保存一个 password 字段长度小于 6 的用户文档。由于 password 字段长度小于 6,Mongoose 将会抛出一个 ValidationError,提示我们密码太短。
自定义验证器
除了内置的验证器之外,我们还可以定义自己的验证器。下面是一个例子:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ---------- - --- ----------------- ----- - ----- ------- --------- ---- -- ---- - ----- ------- ---- ---- -------- ---- ----- ------- -- ------ - ----- ------- --------- ----- ------- ----- ------ ---------------------------------- -- --------- - ----- ------- --------- ----- ---------- --- -------- ---------- ---- ------- -- ------- - ----- ------- --------- - ---------- ------- -- - ------ -------- ------------------------ --- --- -- -------- ------ ---- - ------- - - --- ----- ---- - ---------------------- ------------ -------------- - -----
在上面的代码中,我们定义了一个名为 gender 的字段,并使用了自定义的验证器来确保它的值为 male 或 female。如果我们试图保存一个 gender 字段不为 male 或 female 的文档,Mongoose 将会抛出一个 ValidationError。下面是一个例子:
-- -------------------- ---- ------- ----- ---- - ------------------------- ----- ---- - --- ------ ----- ----- ---- --- ------ ------------------- --------- --------- ------- --------- --- ----------- -------- -- - -------------------- -- -------------- -- - --------------------------- ---
在上面的代码中,我们试图保存一个 gender 字段不为 male 或 female 的用户文档。由于 gender 字段的值不为 male 或 female,Mongoose 将会抛出一个 ValidationError,提示我们性别必须为 male 或 female。
总结
在本文中,我们介绍了如何使用 Mongoose 验证 MongoDB 的模型数据。我们可以使用内置的验证器来验证数据,也可以定义自己的验证器来验证数据。通过使用 Mongoose 的数据验证功能,我们可以确保数据的正确性和完整性,使我们的应用程序更加健壮和可靠。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/657905dbd2f5e1655d2f33c3