25

Joi is returning the following error even though tel is set to be optional. How do we fix this?

Thanks.

Error: Joi Failed: ValidationError: child "tel" fails because ["tel" is not allowed to be empty]


//Define Joi schema
const schema = {
    email: Joi.string().required().email({
        errorLevel: 64,
        minDomainAtoms: 2 
    }).min(6),
    tel: Joi.string().optional().min(10).max(10),
    password: Joi.string().required().min(8).max(64)
}

//Check inputs
const { error, value } = Joi.validate({ 
    email: args.email, 
    tel: tel, 
    password: args.password 
}, schema)   
Nikolaj Dam Larsen
  • 5,455
  • 4
  • 32
  • 45
Cazineer
  • 2,235
  • 4
  • 26
  • 44
  • 4
    [*"Note that empty strings are not allowed by default and must be enabled with `allow('')`."*](https://github.com/hapijs/joi/blob/v10.6.0/API.md#string---inherits-from-any) – jonrsharpe Aug 04 '17 at 20:50
  • Thanks. That solved it perfectly. – Cazineer Aug 04 '17 at 21:04

1 Answers1

47

...empty strings are not allowed by default and must be enabled with allow(''). However, if you want to specify a default value in case of empty string you have to use a different pattern: Joi.string().empty('').default('default value'). This tells Joi that the empty string should be considered as an empty value (instead of invalid) and which value to use as default.

Reference: Joi v10.6.0 Documetations

In your case:

tel: Joi.string().optional().allow('').min(10).max(10)
jonrsharpe
  • 115,751
  • 26
  • 228
  • 437
Kayvan Mazaheri
  • 2,447
  • 25
  • 40