在转换为模式类型猫鼬之前验证原始传入值
Validate original incoming value before cast to type on schematype mongoose
如何在将传入值转换为我们在 属性 类型中指定的类型之前验证传入值的类型?
我有一个这样的模型模式(删除名称、密码等其他属性)
const User = mongoose.model('User', {
age : {
type: Number, // type of data
default: 0, // if don't provided, client will has 0 for age value
validate(value) { //
console.log(typeof(value));
if(value === null){
throw new Error("Age can not be empty string, really ?")
} else if(value < 0) {
throw new Error('Age must be a positive number')
}
}
}
})
然后我尝试创建一个新用户,但我尝试将布尔值赋给年龄,它变成值 1 表示 true 或 0 表示 false。我做了一些测试,我得到的是:
validate 函数的值是转换为 Number 类型后的新值,所以在 validate() 函数中,可以是 1 或 0
即使我将 validate() 函数放在 type: Number 之前。仍然得到值是 1 或 0.
只要有可能,Mongoose 就会将模型的值转换为模式中定义的类型。
转换是在创建模型实例时完成的。
在将模型实例保存到数据库之前检查模型实例的有效性。
因为转换是在有效性检查之前完成的,所以您得到的值已经在 validate
函数中转换。
如果您不希望在值不是类型时转换 Number SchemaType
number,有一个变通方法为 属性 定义自定义 set
方法。这个 set
方法接收模型的原始值作为参数,它将在转换之前执行,所以你有机会 return 一个不能转换为数字的值,例如 a不是空字符串。这样,猫鼬将在尝试保存模型实例时抛出 ValidationError
。
像这样:
const User = mongoose.model('User', {
age : {
type: Number, // type of data
default: 0, // if don't provided, client will has 0 for age value
set: v => typeof v !== 'number' ? 'Throw error' : v
}
});
对于 Boolean SchemaType,您可以使用属性 convertToTrue
和 convertToFalse
分别定义应将哪些值转换为 true 或 false。
请查看mongoose documention了解更多信息。
如何在将传入值转换为我们在 属性 类型中指定的类型之前验证传入值的类型?
我有一个这样的模型模式(删除名称、密码等其他属性)
const User = mongoose.model('User', {
age : {
type: Number, // type of data
default: 0, // if don't provided, client will has 0 for age value
validate(value) { //
console.log(typeof(value));
if(value === null){
throw new Error("Age can not be empty string, really ?")
} else if(value < 0) {
throw new Error('Age must be a positive number')
}
}
}
})
然后我尝试创建一个新用户,但我尝试将布尔值赋给年龄,它变成值 1 表示 true 或 0 表示 false。我做了一些测试,我得到的是:
validate 函数的值是转换为 Number 类型后的新值,所以在 validate() 函数中,可以是 1 或 0
即使我将 validate() 函数放在 type: Number 之前。仍然得到值是 1 或 0.
只要有可能,Mongoose 就会将模型的值转换为模式中定义的类型。
转换是在创建模型实例时完成的。
在将模型实例保存到数据库之前检查模型实例的有效性。
因为转换是在有效性检查之前完成的,所以您得到的值已经在 validate
函数中转换。
如果您不希望在值不是类型时转换 Number SchemaType
number,有一个变通方法为 属性 定义自定义 set
方法。这个 set
方法接收模型的原始值作为参数,它将在转换之前执行,所以你有机会 return 一个不能转换为数字的值,例如 a不是空字符串。这样,猫鼬将在尝试保存模型实例时抛出 ValidationError
。
像这样:
const User = mongoose.model('User', {
age : {
type: Number, // type of data
default: 0, // if don't provided, client will has 0 for age value
set: v => typeof v !== 'number' ? 'Throw error' : v
}
});
对于 Boolean SchemaType,您可以使用属性 convertToTrue
和 convertToFalse
分别定义应将哪些值转换为 true 或 false。
请查看mongoose documention了解更多信息。