在 Mongoose 中,我们可以使用内置的校验器来校验我们的数据模型,比如确定必填字段、检查邮箱格式等。但是在有些情况下,我们需要自定义校验器来进行特殊的校验逻辑。本文将介绍如何在 Mongoose 中实现自定义校验器。
Mongoose 校验器简介
Mongoose 的内置校验器包括以下类型:
- 必填字段:{type: String, required: true} 或者 {type: String, minlength: 1}
- 唯一字段:{type: String, unique: true}
- 数字限制:{type: Number, min: 0, max: 100}
- 枚举:{type: String, enum: ['cat', 'dog', 'fish']}
- 正则表达式:{type: String, match: /^6[0-9]{8}$/}
- 自定义函数:{type: String, validate: function(value) { return value !== 'password'; }}
以上这些校验器已经可以满足大部分需求,但是当我们遇到特殊的校验逻辑时,需要自定义校验器。
自定义校验器的方法
Mongoose 提供了 SchemaType
的 validate()
方法,我们可以通过该方法来实现自定义校验器。以下是自定义校验器的步骤:
- 编写校验函数,该函数接收被校验的值和回调函数作为参数。回调函数的第一个参数为布尔值,代表校验结果;第二个参数为一个字符串,代表校验失败的错误信息。
-- -------------------- ---- ------- -------- ---------------------- --------- - -- ---- --- ------ - ---- -- -------- - --------------- -- ---- - ---- - --------------- -------- -- ---- - -
- 在数据模型中使用
validate()
方法来调用校验函数。
let schema = new mongoose.Schema({ name: { type: String, validate: customValidator } });
自定义校验器示例
接下来,我们演示一个例子,使用自定义校验器来校验一个字符串字段的长度。如果该字段的长度小于 5,则校验失败,返回错误信息。
-- -------------------- ---- ------- --- -------- - -------------------- --- --------------- - --------------- --------- - -- ------ -- ------------ -- -- - --------------- - ---- - --------------- ---------------- - -- --- ------ - --- ----------------- ----- - ----- ------- --------- --------------- - --- --- ----- - ---------------------- -------- --- ---- - --- ------------ -------- ------------------ ------- - --------------------------- -- ------------ ---
以上代码定义了一个 customValidator
函数,该函数判断被校验的值的长度是否大于等于 5,然后使用回调函数返回校验结果。
接着,在数据模型中,我们将 name
字段的类型设置为字符串,并使用 validate()
方法调用 customValidator
函数。
最后,我们创建一个 User
对象,并保存到数据库中。由于该对象的 name
字段的长度小于 5,校验失败,所以会返回错误信息。
总结
本文介绍了在 Mongoose 中实现自定义校验器的方法,即使用 SchemaType
的 validate()
方法来调用校验函数,以满足特殊的校验逻辑需求。希望本文对你有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ff019295b1f8cacdda95ee