介绍
Mongoose 是一个 Node.js 中的对象文档映射库,它为 MongoDB 数据库提供了一种更加简单易用的操作方式。在 Mongoose 中,使用 Schema 定义数据模型,通过 Model 来进行数据操作。
在定义 Schema 的时候,我们可以使用 validate 方法来对数据进行校验。这样,我们就可以在数据存入数据库之前对其进行验证,确保数据的合法性。
validate 方法
validate 方法是 Mongoose 中用于对数据进行校验的方法。它可以对 Schema 中定义的字段进行校验,如果校验不通过,则会抛出一个 ValidationError 异常。
validate 方法接收两个参数:
- 校验函数:这是一个函数,用于对数据进行校验。校验函数可以是同步的,也可以是异步的。
- 校验失败时的错误信息:这是一个字符串,用于描述校验失败时的错误信息。如果校验函数返回 false 或者抛出了一个异常,那么就会使用该参数中的错误信息作为校验失败时的错误信息。
下面是一个示例:
----- ---------- - --- ----------------- ----- - ----- ------- --------- ----- --------- - ---------- -------- --- - ------ -------- -- - -- -------- -- --- -- -------- --------- - - -- ------- -- -- ---
在这个示例中,我们定义了一个 userSchema,其中包含了一个 name 字段。对于 name 字段,我们使用了 validate 方法进行校验,校验函数是一个匿名函数,用于判断 name 的长度是否在 3 到 20 个字符之间。如果校验失败,就会抛出一个 ValidationError 异常,错误信息为“姓名长度必须介于 3 到 20 个字符之间”。
校验函数的参数
校验函数接收一个参数,即要校验的字段的值。在校验函数中,我们可以使用 this 来访问当前 Schema 实例中的其他字段。
下面是一个示例:
----- ---------- - --- ----------------- ----- - ----- ------- --------- ----- --------- - ---------- -------- --- - ------ -------- -- - -- -------- -- -- -- -------- -- --- -- -------- --------- - - -- --------------- -- --- -- -- ---- - ----- ------- --------- ----- -- ---
在这个示例中,我们定义了一个 userSchema,其中包含了一个 name 字段和一个 age 字段。对于 name 字段,我们使用了 validate 方法进行校验,校验函数中判断了 name 的长度是否在 3 到 20 个字符之间,以及当前实例的 age 字段是否大于等于 18。如果校验失败,就会抛出一个 ValidationError 异常,错误信息为“姓名长度必须介于 3 到 20 个字符之间,且年龄必须大于等于 18 岁”。
自定义校验函数
除了使用匿名函数作为校验函数之外,我们还可以定义一个具名函数来作为校验函数。这样,我们可以在多个 Schema 中重复使用同一个校验函数。
下面是一个示例:
-------- ---------------- - ----- ---------- - --------------- ------ ------------------- - ----- ---------- - --- ----------------- ------ - ----- ------- --------- ----- --------- - ---------- -------------- -------- ------------- -- -- ---
在这个示例中,我们定义了一个 validateEmail 函数,用于判断一个字符串是否为合法的邮箱地址。在 userSchema 中,我们使用了 validate 方法对 email 字段进行校验,校验函数为 validateEmail 函数。如果校验失败,就会抛出一个 ValidationError 异常,错误信息为“请输入正确的邮箱地址”。
总结
Mongoose 中的 validate 方法可以帮助我们对数据进行校验,确保数据的合法性。在使用 validate 方法时,我们需要定义一个校验函数,并在 Schema 中使用 validate 方法来进行校验。校验函数可以是同步的,也可以是异步的,可以访问当前 Schema 实例中的其他字段。除了使用匿名函数作为校验函数之外,我们还可以定义一个具名函数来作为校验函数,以便在多个 Schema 中重复使用。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65d2771dadd4f0e0ffadcf4c