How to validate array of objects using Joi?

zakir picture zakir · Jun 10, 2016 · Viewed 53.8k times · Source

I am getting an array of objects to backend, where each object contains a service name. The structure looks like below

[{"serviceName":"service1"},
{"serviceName":"service2"},..]

when I get the array at backend, I want to validate that every object in the array has serviceName property.

I had written the following code, but even though I pass valid array, I am getting validation error.

var Joi = require('joi');
var service = Joi.object().keys({
  serviceName: Joi.string().required()
});

var services = Joi.array().ordered(service);

var test = Joi.validate([{serviceName:'service1'},{serviceName:'service2'}],services)

For the above code, I am always getting the validation error with message

"value" at position 1 fails because array must contain at most 1 items

Answer

zakir picture zakir · Jun 10, 2016

replacing ordered with items will work.

let Joi = require('joi')
let service = Joi.object().keys({
  serviceName: Joi.string().required(),
})

let services = Joi.array().items(service)

let test = Joi.validate(
  [{ serviceName: 'service1' }, { serviceName: 'service2' }],
  services,
)

For reference click here