Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在schematype mongoose上强制转换为type之前验证原始传入值_Javascript_Mongodb_Mongoose_Mongoose Schema - Fatal编程技术网

Javascript 在schematype mongoose上强制转换为type之前验证原始传入值

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(值

在将传入值的类型转换为我们在Schematype的属性类型中指定的类型之前,如何验证该类型

我有一个这样的模型模式(剪切其他属性,如名称、密码等)

const User=mongoose.model('User'){
年龄:{
type:Number,//数据类型
默认值:0,//如果不提供,则客户端的年龄值为0
验证(值){//
console.log(type of(value));
如果(值===null){
抛出新错误(“年龄不能是空字符串,真的吗?”)
}else if(值<0){
抛出新错误('年龄必须是正数')
}
}
}
})
然后我尝试创建一个新用户,但我尝试将布尔值设置为age,它会变成值1表示true,或者0表示false。我做了一些测试,结果是:

  • validate函数上的值是转换为Number类型后的新值,因此对于validate()函数,它可以是1或0

  • 即使我将validate()函数放在type:Number之前。仍然得到值为1或0的值


  • 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    
        }
    });