【问题标题】:Joi validate specific fields based on larger schemaJoi 基于更大的模式验证特定字段
【发布时间】:2021-11-09 23:18:46
【问题描述】:

假设我有以下架构

const schema = Joi.object({
  title: Joi.string().required(),
  start_date: Joi.date().iso().required(),
  end_date: Joi.date().iso().greater(Joi.ref('start_date')).required()
});

有一次我想针对一个对象验证整个架构

const obj = {
  title: 'abc',
  start_date: '2021-11-09',
  end_date: '2021-11-10'
}
const validationResult = schema.validate(obj);

另一方面,我想用我的部分对象验证部分模式 (例如,我不想担心缺少标题)

const obj = {
  start_date: '2021-11-09',
  end_date: '2021-11-11'
}
const validationResult = schema/*sudo*/.onlyFields(['start_date', 'end_date']).validate(obj);

有可能吗? 解决方法是有 2 个模式 - titleSchema 和 dateSchema 并连接

【问题讨论】:

    标签: javascript joi


    【解决方案1】:

    使用schema.extract api解决

    function joiSubSchema(base, fields) {
      return fields.reduce((schema, field) => {
        return schema.concat(Joi.object({
          [field]: base.extract(field)
        }));
      }, Joi.object());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-06
      • 2016-09-14
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-01
      相关资源
      最近更新 更多