通过将选项传递给模式,使所有字段或某些字段必填

I am using Joi for validating body data.

所以,如果我有创建车辆的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);
};

I know I can do here vehicle_id: Joi.string().required() to make them individually 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(); 

我在这里可以做的一件事是为相同的数据创建多个架构,这很好。

但是最终创建了三到四个用于验证相同数据的架构。

这附近有工作吗?我阅读了文档,但找不到类似的东西。

评论