Javascript 在schematype mongoose上强制转换为type之前验证原始传入值
在将传入值的类型转换为我们在Schematype的属性类型中指定的类型之前,如何验证该类型 我有一个这样的模型模式(剪切其他属性,如名称、密码等)Javascript 在schematype mongoose上强制转换为type之前验证原始传入值,javascript,mongodb,mongoose,mongoose-schema,Javascript,Mongodb,Mongoose,Mongoose Schema,在将传入值的类型转换为我们在Schematype的属性类型中指定的类型之前,如何验证该类型 我有一个这样的模型模式(剪切其他属性,如名称、密码等) const User=mongoose.model('User'){ 年龄:{ type:Number,//数据类型 默认值:0,//如果不提供,则客户端的年龄值为0 验证(值){// console.log(type of(value)); 如果(值===null){ 抛出新错误(“年龄不能是空字符串,真的吗?”) }else if(值
const User=mongoose.model('User'){
年龄:{
type:Number,//数据类型
默认值:0,//如果不提供,则客户端的年龄值为0
验证(值){//
console.log(type of(value));
如果(值===null){
抛出新错误(“年龄不能是空字符串,真的吗?”)
}else if(值<0){
抛出新错误('年龄必须是正数')
}
}
}
})
然后我尝试创建一个新用户,但我尝试将布尔值设置为age,它会变成值1表示true,或者0表示false。我做了一些测试,结果是:
Mongoose将尽可能将模型的值转换为模式中定义的类型 在创建模型实例时完成转换 在将模型实例保存到数据库之前,将检查其有效性 由于强制转换是在有效性检查之前完成的,因此您将获得已在
validate
函数中强制转换的值
如果不希望在值不是类型时强制转换数字模式类型
编号时,有一个变通方法为属性定义自定义set
方法。此set
方法接收模型的原始值作为参数,并将在强制转换之前执行,因此您有机会返回无法强制转换为数字的值,例如非空字符串。这样,mongoose在试图保存模型实例时将抛出一个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
}
});
对于布尔模式类型,可以使用属性converttorue
和convertToFalse
分别定义哪些值应转换为true或false
请查看更多信息。我一直在使用“set”,但不知道是否收到原始类型的传入值,谢谢@不客气!请投票并接受答案,以便其他用户在面临相同问题时能够找到解决方案。回头见!
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
}
});