Mongoose 是一款流行的 Node.js ODM(对象文档映射)库,用于在 Node.js 中与 MongoDB 进行交互。其中,验证器是 Mongoose 重要功能之一。在本文中,我们将深入探讨 Mongoose 的验证器,讲解其详细用法,并提供一些示例代码。
什么是验证器?
验证器用于在 Mongoose 中检查模型属性是否有效。在模型保存之前,Mongoose 会自动调用配置的验证器函数进行验证。如果验证失败,Mongoose 将拒绝对象的保存,并返回错误。
Mongoose 支持许多类型的验证器。其中包括内置的类型和自定义类型。用户可以根据需要选择合适的验证器。
内置验证器
Mongoose 内置了许多验证器,这些验证器可以应用于任何类型的字段。下面介绍一些内置验证器。
必需性(required)
必需性验证器可以检查一个字段是否必须存在。如果该字段不存在,则 Mongoose 将产生一个错误。
const schema = new mongoose.Schema({ name: { type: String, required: true } });
最小长度(minlength)
最小长度验证器可以检查一个字段的最小长度。如果字段的长度不足,则 Mongoose 将产生一个错误。
const schema = new mongoose.Schema({ name: { type: String, minlength: 5 } });
最大长度(maxlength)
最大长度验证器可以检查一个字段的最大长度。如果字段的长度超过限制,则 Mongoose 将产生一个错误。
const schema = new mongoose.Schema({ name: { type: String, maxlength: 10 } });
正则表达式(match)
正则表达式验证器可以检查一个字段是否匹配特定的正则表达式。如果字段无法匹配,则 Mongoose 将产生一个错误。
const schema = new mongoose.Schema({ name: { type: String, match: /^\d{6}$/ } });
枚举(enum)
枚举验证器可以检查一个字段是否在特定的选项列表中。如果该字段的值不在列表中,则 Mongoose 将产生一个错误。
const schema = new mongoose.Schema({ name: { type: String, enum: ['John', 'Mike', 'Sarah'] } });
自定义验证器
除了内置验证器,Mongoose 还支持用户定义验证器。自定义验证器可应用于任意字段类型。下面介绍自定义验证器的方法。
用户可以使用 Schema.path()
函数来定义验证器。该函数需要路径名和函数作为参数。路径名是指要验证的字段名称,函数是指要执行的验证函数。
-- -------------------- ---- ------- ----- --------------- - -------- ------- - ----- ----- - ---------- ------ ------------------ -- ----- ------ - --- ----------------- -------- - ----- ------- --------- ----------------- -------- --- ------ - ---
在上面的例子中,validateZipCode
函数用于验证邮政编码。它返回一个 true/false 值,用于确定该字段是否有效。如果该字段无效,则函数返回相应的错误信息。
预定义错误信息
在上面的示例中,我们在定义自定义验证器时,将错误信息作为数组传递给 validate
参数。但是,Mongoose 还提供了一些预定义的错误信息,可以在自定义验证器中使用。
-- -------------------- ---- ------- ----- ----------------- - - ---------- ---------------- -------- -------- -- --- - ----- --- ----- ------ --- ------- -- ----- ------ - --- ----------------- -------- - ----- ------- --------- ----------------- - ---
在这个例子中,我们定义了一个 zipCodeValidation
对象,包括 validator
和 message
属性。validator
属性指向验证函数。message
属性包含错误信息,其中的 {VALUE}
占位符将被有效的值替换。
实用提示
使用 Mongoose 验证器时,有些实用的提示可以使用。下面列举一些有用的提示。
this
引用
在定义自定义验证器时,可以使用 this
引用表示验证器正在验证的对象。例如:
-- -------------------- ---- ------- ----- ----------- - -------- ------- - ------ ----- -- -- -- ----- -- --------- -- ---------- ------- -- ----- ------ - --- ----------------- ---- - ----- ------- --------- ------------- -------- ----- -- ---- - ----- ----- --------- ---- - ---
在上面的示例中,我们可以使用 this.dob
来引用生日字段。
异步验证
有时候,验证函数需要异步执行,例如,验证一个电子邮件地址是否已经存在于数据库中。在这种情况下,可以通过将验证函数返回一个 Promise 来实现异步验证。
-- -------------------- ---- ------- ----- ------ - --- ----------------- ------ - ----- ------- --------- - ---------- -------- ------- - ------ --- --------------- -- - -------------- ------ ----- -- ---------- -- - -- ------ - --------------- - ---- - -------------- - -- --------- -- - --------------- --- --- -- -------- ------ ------- -------- - - ---
在上面的示例中,我们验证了 email
字段是否已经存在于数据库中。我们返回一个 Promise,当数据库查询结束时,解析 Promise 并根据结果返回 true 或 false。
结论
Mongoose 验证器是一项重要功能,它可以确保模型属性的有效性,并提供有用的错误信息。本文提供了一些内置验证器和自定义验证器的示例,并讲解了一些实用提示。希望本文可以为您的 Mongoose 开发提供一些帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67144b87ad1e889fe21316d2