【发布时间】:2020-09-03 21:38:50
【问题描述】:
我正在使用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'})
【问题讨论】:
-
既然你找到了解决方案,我想你也应该发布一个答案
-
那不回答问题,我还需要回答其他部分。
-
结账@saurabh answer here 挺全面的。
标签: javascript joi