Mongoose 是 Node.js 中最流行的 MongoDB ODM(Object Data Management)库。在Mongoose 中,你可以通过 Schema 和 Model 来定义和操作 MongoDB 文档,其中包括一系列的 validate 校验器,可以用来约束数据的有效性。本文将为你详细解释 Mongoose 中的各种 validate 校验器,让你的数据更加安全可靠。
Mongoose validate 校验器
在 Mongoose 中,validate 校验器是一个选项,可以在 SchemaType API 中使用。它允许在将数据存到数据库之前对数据进行检查,并阻止无效数据的入库。
validate 校验器有两种风格:同步和异步。同步 validator 是一个两端返回 true 或 false 来指明数据是否有效的函数;反之,异步 validator 接受一个回调函数,它会返回一个 promise 或一个错误信息(如果数据无效的话)。
validate 校验器的使用很灵活,你可以在任何级别上进行使用。你可以在 Schema 中定义全局校验器来针对所有没有定义 validate 选项的 SchemaType 来进行校验。你也可以为每个 individual SchemaType 定义自己的校验器。
以下是 Mongoose 中的一些常用 validate 校验器,让我们来看一看它们的使用方式:
1. required 校验器
required 校验器用来验证一个文档对象是否具有该 SchemaType。如果不具备,则返回验证失败。示例代码如下:
-- -------------------- ---- ------- ----- ---------- - --- ----------------- ------ - ----- ------- --------- ---- -- ------- - ----- ------- --------- ---- -- -------- - ----- ----- --------- ---- -- ------ - ----- ------- --------- ---- - ---
在上面的代码中,我们定义了一个 bookSchema
,包含了四个字段(title、author、publish、price)。这里使用了 required 校验器,即每个字段都必须设置。如果有任何一个字段未设置,在保存到数据库之前, validate 校验器会检查这个文档是否具备了所有的必需字段。
2. minlength 和 maxlength 校验器
minlength 和 maxlength 校验器用来验证字符串长度是否满足要求。示例代码如下:
const userSchema = new mongoose.Schema({ name: { type: String, minlength: 3, maxlength: 20 } });
在上面的代码中,我们定义了一个 userSchema
,包含了一个字符串类型的 name
字段。使用 minlength 和 maxlength 校验器,指定了 name
字段值的长度要求,只有在符合要求时才会保存到数据库中。
3. match 校验器
match 校验器用来验证字符串是否符合指定的正则表达式规则。示例代码如下:
const userSchema = new mongoose.Schema({ email: { type: String, match: /^\S+@\S+\.\S+$/ } });
在上面的代码中,我们定义了一个 userSchema,包含了一个字符串类型的 email
字段。使用 match 校验器,指定了 email
字段值的格式规则。只有在符合规则时才会保存到数据库中。
4. enum 校验器
enum 校验器用来保证值是固定的集合中的一个。示例代码如下:
const userSchema = new mongoose.Schema({ role: { type: String, enum: ['user', 'admin', 'contributor'] } });
在上面的代码中,我们定义了一个 userSchema
,包含了一个字符串类型的 role
字段。使用 enum 校验器,指定了 role
字段值只能从数组 ['user', 'admin', 'contributor']
中选择,否则会返回验证失败。
5. validate 校验器
使用 validate 校验器,你可以创建一个自定义的同步或异步校验器来验证一个字段。例如:
const userSchema = new mongoose.Schema({ username: { type: String, validate: function (value) { return value.length > 3; } } });
上面的代码中,我们定义了一个自定义的 validate 校验器来检查 username 值是否具有三个或更多的字符。
可以看到,validate 校验器允许使用函数来进行验证。这个函数应该返回 true 或 false 进行表示验证成功或者失败。同时,如果输入的信息无效,这个函数可以返回一个提示信息,如果返回的是一个非 null 或者空字符串,则会被作为验证失败的原因,mongoose 会将其包装为一个 ValidationError。
结论
在本文中,我们详细介绍了 Mongoose 中的 validate 校验器,这些校验器的使用可使你的数据更加安全可靠。当你使用 Mongoose 创建 ODM 时,请务必考虑使用这些校验器来约束数据的有效性。我们深入探讨了常用的 validate 校验器及它们的使用方式,播下了构建高质量 ODM 库的基本功。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67497a6ba1ce00635461c708