从 Joi 模式中提取类型和约束

Extracting a type and constraint from a Joi schema

如果我有架构:

const schema = Joi.object({
    title: Joi.string().trim().alphanum().min(3).max(50).required().messages({
        "string.base": `Must be text`,
        "string.empty": `Cannot be empty`,
        "string.min": `Must be > 3`,
        "string.max": `Must be < than 50`,
        "any.required": `Required`,
    }),

    ... // more key/constraints 
});

是否可以访问 key/value 对 Joi 对象以便在函数中使用它来验证单个字段?

例如,我可以这样做:

const validateProperty = ({ value, name }, schema) => {
    const { error } = schema[name].validate(value);
    if(!error) return null;
    return error.details[0].message;
};

validateProperty({value:valueToValidate, name:'title'}, schema)

其中 name 是架构中约束的键?它只会节省我为整个表单编写模式,然后将每个单独的约束重写为它自己的模式,以便在需要时验证单个字段(例如 onBlur)

原来 .extract() here 是正确的答案,这只是我实现中的一个错误:

const validateProperty = ({ value, name }, schema) => {
    const { error } = schema.extract(name).validate(value);
    if(!error) return null;
    return error.details[0].message;
};

const validate = (data, schema) => {
    const options = { abortEarly: false }
    const { error } = schema.validate(data, options);
    if(!error) return null;

    const errors = {};
    error.details.forEach(error => {
      errors[error.path[0]] = error.message
    })
    return errors;
}

validate(data, schema)

validateProperty({ value: valueToValidate, schema })