Mongoose 是 Node.js 中最流行的 MongoDB ORM 库之一,它可以帮助我们更方便地操作 MongoDB 数据库。在 Mongoose 中,校验器是一个非常强大的工具,可以帮助我们确保数据的有效性。本文将详细介绍 Mongoose 中的校验器,包括校验器的基本用法、常用的校验器类型以及文档级和模型级校验器。
校验器的基本用法
在 Mongoose 中,我们可以在定义 Schema 时添加校验器:
-- -------------------- ---- ------- ----- ---------- - --- ----------------- ----- - ----- ------- --------- ---- -- ---- - ----- ------- ---- ---- ------------- ---- --- -- ------ - ----- ------- ----- ----- ---------- ----- --------- - ---------- ----------- - ------ ------------------------------------------------- -- -------- ----- -- --------------- ---------- - - ---
如上所示,我们可以通过在 Schema 的字段定义中添加相关的校验器实现数据校验。
需要注意的是,我们可以在字段定义中添加一些 MongoDB 支持的基本校验器,如 required
,min
和 max
等。
常用的校验器类型
除了上面提到的基本校验器外,Mongoose 还支持多种自定义校验器,如 match
,enum
和 unique
等。以下是常用的校验器类型的详细说明:
match
match
校验器用于验证某个字段是否符合指定的正则表达式:
const userSchema = new mongoose.Schema({ username: { type: String, match: /[a-z0-9]+/ } });
上述代码中,username
字段必须是由小写字母和数字组成的字符串。如果验证失败,将抛出 ValidationError
异常。
enum
enum
校验器用于验证某个字段的值是否在指定的范围内:
const userSchema = new mongoose.Schema({ role: { type: String, enum: ['user', 'admin'] } });
上述代码中,role
字段只能是 user
或 admin
。如果验证失败,将抛出 ValidationError
异常。
unique
unique
校验器用于验证某个字段的值是否唯一:
const userSchema = new mongoose.Schema({ email: { type: String, unique: true } });
上述代码中,email
字段必须是唯一的。如果验证失败,将抛出 MongoError
异常。
文档级和模型级校验器
除了在字段定义中添加校验器外,Mongoose 还支持文档级和模型级校验器。
文档级校验器
文档级校验器是指在保存文档之前对整个文档进行校验的方法。我们可以在 Schema 定义中添加一个 validate
属性来指定文档级校验器:
-- -------------------- ---- ------- ----- ---------- - --- ----------------- --------- - ----- ------- --------- ---- - --- --------------------------------- - ------ ------------ --- -------- -- ------- -------- ----- ---- - ---------------------- ------------ ----- ---- - --- ------ --------- ------- --- ------------ -- -- --------------- --
上述代码中,我们定义了一个文档级校验器,检查用户名是否为 admin
。如果检查失败,将抛出 ValidationError
异常。
模型级校验器
模型级校验器是指在保存文档之前对整个集合进行校验的方法。我们可以在模型定义中添加一个静态方法来指定模型级校验器:
-- -------------------- ---- ------- ----- ---------- - --- ----------------- --------- - ----- ------- --------- ---- - --- -------------------------------- - ----- ------------------ - ----- ----- - ----- --------------------- -------- --- ------ ----- --- -- -- ----- ---- - ---------------------- ------------ ----- ---- - --- ------ --------- ------- --- --- - ----- ------ - ----- ---------------- - ----- --- - ----------------- - ----- ------- - ----- ---------------------------- --------------------- -- -----
上述代码中,我们定义了一个模型级校验器,检查用户名是否已存在于数据库中。如果检查失败,将返回 false
。注意,模型级校验器一般使用异步方法,因为它需要去查询数据库。
总结
本文对 Mongoose 中的校验器进行了详细的介绍,包括校验器的基本用法、常用的校验器类型以及文档级和模型级校验器。希望本文可以帮助您更好地理解 Mongoose 中的校验器,并在实际开发中更加灵活地使用它们。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647807eb968c7c53b044d67a