简体   繁体   中英

Unusual behaviour of any.when() in Joi

const Joi = require('@hapi/joi')

var schema_1 = Joi.object({
    a: Joi.number().integer(),
    b: Joi.number().integer()
}).when(Joi.object({
    'a': Joi.number().valid(5),
    'b': Joi.number().valid(10),
}), {then: Joi.any().forbidden()})

var schema_2 = Joi.object({
    a: Joi.number().integer(),
    b: Joi.number().integer()
}).when(Joi.object({
    'a': Joi.number().valid(5),
}), {then: Joi.any().forbidden()})

var object = {
    a: 5,
    b: 10
}

schema_1.validate(object) // this throws ValidationError
schema_2.validate(object) // this does not throw any error

I was expeting error in schema_2 also
Why schema_2 is not showing any error?

Do not forget to add b as well in the schema_2 .

const Joi = require('@hapi/joi')

var schema_1 = Joi.object({
    a: Joi.number().integer(),
    b: Joi.number().integer()
}).when(Joi.object({
    'a': Joi.number().valid(5),
    'b': Joi.number().valid(10),
}), {then: Joi.any().forbidden()})

var schema_2 = Joi.object({
    a: Joi.number().integer(),
    b: Joi.number().integer()
}).when(Joi.object({
    'a': Joi.number().valid(5),
    'b': Joi.any(),
}), {then: Joi.any().forbidden()})

var object = {
    a: 5,
    b: 10
}

schema_1.validate(object) // this throws ValidationError
schema_2.validate(object) // this does not throw any error

Here is the result.

const x = schema_1.validate(object) // this throws ValidationError
const y = schema_2.validate(object) // this does not throw any error

console.log(x)
console.log(y)
{ value: { a: 5, b: 10 },
  error:
   { ValidationError: "value" is not allowed _original: { a: 5, b: 10 }, details: [ [Object] ] } }
{ value: { a: 5, b: 10 },
  error:
   { ValidationError: "value" is not allowed _original: { a: 5, b: 10 }, details: [ [Object] ] } }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM