在开发项目的过程中,经常需要约束用户输入的数据。Mongoose 是 Node.js 中流行的 MongoDB ODM(对象文档映射),它提供了方便的数据格式定义和数据验证功能,使得开发者可以轻松地约束数据格式及有效性。本文将详细讲解 Mongoose 中如何使用 Validation 来约束数据的格式及有效性,并提供示例代码。
数据格式定义
在 Mongoose 中定义数据格式,需要使用 Schema
和 Model
两个对象。Schema
定义了一个数据模型的结构,包括字段名、数据类型、验证器等信息。Model
是一个操作数据库的抽象类,它与数据模型相关联,通过操作数据模型的实例来对数据库进行操作。
定义数据格式的一个示例:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------ - ---------------- ----- ---------- - --- -------- --------- - ----- ------- --------- ----- ------- ---- -- --------- - ----- ------- --------- ----- ---------- - -- ------ - ----- ------- --------- ----- ------- ----- ------ ---------------------------------- - --- ----- ---- - ---------------------- ------------ -------------- - -----
在上面的示例中,定义了一个 User
的数据模型,包括 username
、password
和 email
三个字段。其中,username
和 email
都是必填项,并且在数据库中是唯一的,password
的最小长度为 8。email
使用了正则表达式进行匹配验证。这里只是一个简单的示例,实际项目中可以根据需求对数据模型进行更加丰富和复杂的定义。
数据验证器
在 Mongoose 中,数据验证器是用于验证数据有效性的函数。当保存数据时,Mongoose 会自动检测数据是否符合数据模型中所定义的验证规则,如果不符合会抛出错误。以下是 Mongoose 内置的一些验证器:
required
: 指定是否必填,值为true
或false
。default
: 指定默认值。min/max
: 验证数值的最小值和最大值。minlength/maxlength
: 验证字符串的最小长度和最大长度。enum
: 验证字符串是否在指定的枚举列表中。match
: 使用正则表达式验证字符串是否匹配。validate
: 自定义验证器函数,需要返回布尔值或者一个 Promise。
以下是一个示例,使用了 minlength
、maxlength
和 match
三个验证器:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------ - ---------------- ----- ---------- - --- -------- ------ - ----- ------- --------- ----- ---------- -- ---------- -- -- -------- - ----- ------- --------- ----- ---------- -- -- ------- - ----- ---------------------- ---- ------ - --- ----- ---- - ---------------------- ------------ -------------- - -----
在上面的示例中,title
必填,且长度在 5 到 50 之间,content
也必填,且长度不能小于 10。在 author
字段中,使用了 Schema.Types.ObjectId
类型,表示与 User
模型相关联。这里没有使用 match
验证器,读者可以自行添加。
自定义数据验证器
Mongoose 的自定义验证器允许我们编写自己的验证函数来验证数据的有效性,非常方便。例如,下面的代码演示了如何使用自定义验证器来验证数据的合法性:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------ - ---------------- ----- ---------- - --- -------- --------- - ----- -- ---------- - ----- ---------------------- --------- ----- ---- --------- -- --------- - ----- ------- --------- ---- - --- --------- --------------- ------- ------- --- ----- -- --- ------- - --- -------- ------------------ - ------ ---------- -- ---- - ----- ---- - ---------------------- ------------ -------------- - -----
在上面的例子中,定义了一个 Cart
数据模型,其中 products
是一个数组类型,其中每个元素有 productId
和 quantity
两个属性。我们需要验证 products
数组的长度是否超过 100,如果超过则报错。这里使用了自定义验证器 productsLimit
,它返回数组长度是否小于等于 100。在 cartSchema
的 products
属性中,使用了 validate
验证器,它需要传递两个参数,一个是验证函数,第二个则是验证失败时要显示的错误信息。如果验证函数返回 false
,则会抛出错误信息。
总结
本文介绍了 Mongoose 中 Validation 的使用方法,包括数据格式定义、字段约束和自定义验证器等。使用 Mongoose Validation 可以轻松地约束数据格式及有效性,从而保证数据的安全性和正确性。了解了 Mongoose Validation 的基本用法,读者可以在实际项目中自行应用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/651a7fc795b1f8cacd26a329