为了更容易验证我的输入,我试图确保只有特定字段设置为true才能创建mongoose文档(此字段当然总是如此,IF文档实际上是正确创建的,这是出于报告原因)。
这是一个简化的poc:
$('#div1').scrollTop($('#div1')[0].scrollHeight);
问题是,即使我提供随机字符串而不是布尔值或"布尔字符串" (例如" false"或" true"而不仅仅是false / true),文档仍然正确保存,标志设置为true。
如果我提供" false"或者为false,验证工作正常并引发错误。
显然,在实际调用验证之前(显然也是默认动作),存在某种类型转换。有没有办法让我修复我的验证,或者在创建Mongoose-Object之前是否必须明确检查对象?
这是猫鼬4.3.6。
答案 0 :(得分:0)
你可以将Boolean类型更改为String并像那样验证
testField: {
type : String,
required: true,
validate: {
validator: function (value) {
return value === "true"
},
message: 'Field must be true'
}
}
答案 1 :(得分:0)
这是一种与黑客接壤的解决方案,但它应该可以工作:
const mongoose = require('mongoose');
mongoose.Schema.Types.Boolean.convertToFalse = new Set([false]);
mongoose.Schema.Types.Boolean.convertToTrue = new Set([true]);
请记住在第一个需求之后立即进行设置,并密切关注缓存。
相关文档: https://mongoosejs.com/docs/schematypes.html#booleans
转动我们的猫鼬,即使使用严格的模式,也要投放五种不同的东西。真的磨我的齿轮。