0

我有一个 post call 可以将有效负载作为单个JS对象以及对象数组将其保存到数据库中。如何编写模式来验证此类有效负载?

JS 对象

{
  label: 'label',
  key: 'key',
  help_text: 'text'
}

或者

[
{
  label: 'label1',
  key: 'key1',
  help_text:'text1'
 },
 {
  label: 'label2',
  key: 'key2',
  help_text:'text2'
 }
 ]
4

1 回答 1

5

您可以使用Joi.alternatives()完成此操作。这是一个工作示例:

const joi = require('joi');

var objectSchema = joi.object().keys({
    label: joi.string().required(),
    key: joi.string().required(),
    help_text: joi.string().required()
}).unknown(false);

var arraySchema = joi.array().items(objectSchema);

var altSchema = joi.alternatives().try(objectSchema, arraySchema);

var objTest = {label: 'cuthbert', key: 'something', help_text: 'helping!'};

var arrTest = [
    objTest
];

var failingArrTest = [
    {
        unknownProperty: 'Jake'
    }
];

var result = joi.validate(objTest, altSchema);

var resultArrTest = joi.validate(arrTest, altSchema);

var resultFailingArrTest = joi.validate(failingArrTest, altSchema);

console.log(result);

console.log(resultArrTest);

console.log(resultFailingArrTest);
于 2017-01-09T15:23:56.110 回答