首页 > 解决方案 > 父数组不允许 JOI npm 库

问题描述

嗨,我使用 Joi 在一个简单的 API 上验证 JSON 对象,我的验证模式是:

let holidays = Joi.object().keys({
    day: Joi.number().required(),
    month: Joi.number().required(),
    description: Joi.string().required()
})

const countryValidateSchema = Joi.object().keys({
    name: Joi.string().required(),
    holidays: Joi.array().items(holidays),
    states: Joi.array().required().items(Joi.string())
});

当添加一个新国家时,我会这样验证它:

function newCountry(req, res) {
    //TODO validate
    var newCountry = new Country(req.body);

    const result = Joi.validate(newCountry, validate.countryValidateSchema);
    const { value, error } = result; 
    const valid = error == null; 

    if (!valid) { 
      res.status(422).json({ 
        message: result, 
        data: newCountry 
      }) 
    } else { 
        //Store on DB
        newCountry.save((err,country) =>{
            if(err){
                res.send(err);
            }else{
                res.status(201).json({message: "Country successfully added!", country})
            }
        });
    }
}

当我尝试使用此 JSON 添加新国家/地区时,会引发错误: ParentArray is not allowed

{
    "name": "TestCountry",
    "holidays": [
        {
            "day": 1,
            "month": 2,
            "description": "test"
        }
    ],
    "states": [
         "test1",
         "test2",
         "test3",
         "test34"
        ]
}

有任何想法吗?

标签: node.jsjsonjoi

解决方案


解决了,我正在验证 Country 对象而不是 json 主体。所以解决方法是改变

var newCountry = new Country(req.body);

var newCountry = req.body;

推荐阅读