Joi validation of array

后端 未结 6 929
梦如初夏
梦如初夏 2021-02-02 05:29

trying to validate that an array has zero or more strings in one case and that it has zero or more objects in another , struggling with Joi docs :(

validate: {
          


        
相关标签:
6条回答
  • 2021-02-02 05:45

    Joi.array().items() accepts another Joi schema to use against the array elements. So an array of strings is this easy:

    Joi.array().items(Joi.string())
    

    Same for an array of objects; just pass an object schema to items():

    Joi.array().items(Joi.object({
        // Object schema
    }))
    
    0 讨论(0)
  • 2021-02-02 05:45

    You can also try this way, I have been using it for long time and working fine for me.

    If your array is array of objects than use below:

    const Joi = require('joi');
    
    let schema = Joi.object().keys({
                items: Joi.array().items(
                    Joi.object({
                        item_id: Joi.number().required(),
                        item_qty: Joi.number().required(),
                        item_type_id: Joi.number().required(),
                        item_qty: Joi.number().required(),
                        base_price: Joi.number().required(),
                        actual_price: Joi.number().required(),
                    })
                ).required(),
            });
    
            let errors = Joi.validate(req.body, schema);
    

    if you array is simple array than:

    let schema = Joi.object().keys({
                    items: Joi.array().items(
                    Joi.number().required()
                ).min(10).required(),
                });
    
    0 讨论(0)
  • 2021-02-02 05:56

    Joi.array().items(Joi.string().required(), Joi.number().required()); found it here

    0 讨论(0)
  • 2021-02-02 05:59

    you can try this:

    function(data) {
     const Schema = {
       categories: Joi.array().items(Joi.string()),
       variables: Joi.array().items(Joi.object().keys().min(1))
     }
     return Joi.validate(data, Schema)
    }
    

    for more details checkout this repo: https://github.com/raysk4ever/nodejs_withMongoRefArray

    0 讨论(0)
  • 2021-02-02 06:08

    If you want to validate an array of strings in Joi:

    Joi.array().items(Joi.string().valid("item1", "item2", "item3", "item4"))

    0 讨论(0)
  • 2021-02-02 06:11
    validate: {
            headers: Joi.object({
                    'content-type': "application/vnd.api+json",
                    accept: "application/vnd.api+json"
            }).options({ allowUnknown: true }),
            payload : Joi.object().keys({
                data : Joi.object().keys({
                    type: Joi.any().allow('BY_TEMPLATE').required(),
                    attributes: Joi.object({
                        to : Joi.string().email().required(),
                        templateId : Joi.string().required(),
                        categories : Joi.array().items(Joi.string()),
                        variables : Joi.array().items(Joi.object().keys().max(1))
                    })
                }).required()
            })
        }
    
    0 讨论(0)
提交回复
热议问题