如果提供了String,则Mongoose布尔验证无用

时间:2016-01-19 10:50:26

标签: node.js mongodb validation mongoose

为了更容易验证我的输入,我试图确保只有特定字段设置为true才能创建mongoose文档(此字段当然总是如此,IF文档实际上是正确创建的,这是出于报告原因)。

这是一个简化的poc:

$('#div1').scrollTop($('#div1')[0].scrollHeight);

问题是,即使我提供随机字符串而不是布尔值或"布尔字符串" (例如" false"或" true"而不仅仅是false / true),文档仍然正确保存,标志设置为true。

如果我提供" false"或者为false,验证工作正常并引发错误。

显然,在实际调用验证之前(显然也是默认动作),存在某种类型转换。有没有办法让我修复我的验证,或者在创建Mongoose-Object之前是否必须明确检查对象?

这是猫鼬4.3.6。

2 个答案:

答案 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

转动我们的猫鼬,即使使用严格的模式,也要投放五种不同的东西。真的磨我的齿轮。