【发布时间】:2020-04-15 21:17:45
【问题描述】:
如果value 设置为option1,则下面的架构允许我拥有所需的optionalField,但如果值设置为option2,则optionalField 可以设置为用户想要的任何内容。相反,如果value 设置为option1 以外的任何值并且传入optionalField,我希望验证失败。
const validValues = ['option1', 'option2']
const sampleSchema = new mongoose.Schema({
value: {
type: String,
enum: validValues,
required: true
}
optionalField: {
type: Number,
required: function() { return this.value === 'option1' }
// validation should fail if this property is passed in when value is anything but option1
}
})
Joi 使用Joi.forbidden() 有一个很好的方法来实现这一点:
const validValues = ['option1', 'option2']
const schema = Joi.object({
value: Joi.string().valid(...validValues).required(),
optionalField: Joi.string().when('value', { is: 'option1', then: Joi.required() otherwise: Joi.forbidden() })
})
如果我使用此架构进行验证并将 optionalField 传递给 Joi,则验证将失败,除非 value 是 option1。
我希望找到一种方法在 Mongoose 中实现同样的目标。
谢谢!
【问题讨论】:
标签: node.js mongodb validation mongoose joi