javascript - Joi 基于更大的模式验证特定字段
问题描述
说我有以下架构
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 并连接
解决方案
使用schema.extract
api解决
function joiSubSchema(base, fields) {
return fields.reduce((schema, field) => {
return schema.concat(Joi.object({
[field]: base.extract(field)
}));
}, Joi.object());
}
推荐阅读
- react-native - 开发人员菜单中缺少远程调试 JS 选项
- windows - windows上的git说未跟踪的工作树文件将被结帐覆盖,但它们不存在
- python - 无需硬编码即可获取类的字段名称
- sql - SQL join 唯一
- javascript - 如何结合选定的价格和输入复选框价格Jquery?
- c++ - C++ 调用和定义不匹配
- node.js - 在 CPanel 中安装 NPM 模块时出错?
- elasticsearch - 如何签署 Elasticsearch 索引?
- prolog - 检查一个数字是否包含数字 A 和 B。 Prolog
- python - 字典名称来自存储在列表/元组/变量中的值