javascript - 通过将选项传递给模式,使所有字段或某些字段成为必需字段
问题描述
我Joi
用于验证身体数据。
所以,如果我有一个创建车辆的 API。我会创建一个如下所示的架构。
const validateUserVehicleData = (data) => {
const schema = Joi.object({
id: Joi.string(),
odometer_count: Joi.number().allow(null),
registration_number: Joi.string(),
current_milage: Joi.number(),
last_service_date: Joi.date(),
last_service_km: Joi.number(),
chassis_num: Joi.string(),
engine_num: Joi.string(),
vehicle_id: Joi.string(),
});
return schema.validate(data);
};
我知道我可以在这里单独vehicle_id: Joi.string().required()
要求它们。
但我想通过将动态数据传递给模式对象来制作一些字段。
就像,如果我只想制作其中的几个,如下所示。
//It should make registration_number and currrent_mileage required
const schema = Joi.object({..}).required(['registration_number', 'currrent_mileage ']); // I know this doesn't exist but if there is any workaround
我还尝试了类似下面的方法来使所有这些都成为必需的,但它既不工作也不抛出任何错误。
// It should make all fields required
const schema = Joi.object({..}).required();
我可以在这里做的一件事为相同的数据创建多个模式,这工作正常。
但最终创建了三到四个模式来验证相同的数据。
这里有什么工作吗?我浏览了文档,但找不到任何类似的东西。
更新
为了验证所有字段,我找到了解决方法。
Joi.object({
registration_number: Joi.string(),
vehicle_id: Joi.string(),
.....
}).options({presence: 'required'})
解决方案
要选择所需的键,请使用and
方法
根据以下文档:object.and(...peers, [options])
定义键之间的全有或全无关系,如果其中一个对等点存在,则它们都是必需的,其中:
peers
- 字符串键名,如果存在,则全部都是必需的。选项optional settings
:separator
- 覆盖默认值。层次分隔符。设置为 false 以将键视为文字值。
const schema = Joi.object({ ... }).and("registration_number", "current_mileage");
推荐阅读
- nftables - nftables 集:无法在命令行上添加带有标志间隔的集
- manifest - 如果注销隐式和显式注册的广播接收器,它会注销吗?
- c++ - C ++有没有办法替换字符串中的多个标记
- aws-lambda - 使用 dynamoDB 在 lambda 中时间戳过期时更改属性的状态
- javascript - 这里的 useRef 内部发生了什么?
- python - 为什么矩阵乘法与灰度图像矩阵会给出错误的输出?
- python-3.x - wxPython - 不能在 __init__ 中调用类方法
- html - 悬停在其行上时如何更改特定表格单元格的颜色?
- angular - 如何使用 ngModel 错误检查将模板名称添加到动态输入
- python - 在 ParDo 上返回我自己的一个类时,数据流管道会引发 PicklingError