javascript - 通过将选项传递给架构,使所有字段或某些字段成为必需字段

标签 javascript joi

我正在使用 Joi用于验证 body 数据。

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

我可以在这里做的一件事是为相同的数据创建多个模式,这工作正常。

但最终创建了三到四个模式来验证相同的数据。

这附近有工作吗?我浏览了 doc,但我找不到任何类似的东西。

更新

为了验证所有字段,我找到了解决方法。
Joi.object({
    registration_number: Joi.string(),
    vehicle_id: Joi.string(),
    .....
}).options({presence: 'required'})

最佳答案

要选择所需的 key ,请使用 and方法

根据docsobject.and(...peers, [options]) :

定义键之间的全有或全无关系,如果存在一个对等点,则所有这些都需要,其中:

  • peers - 字符串键名称,如果存在,则全部为必填项。
    选项
  • optional settings :
  • separator - 覆盖默认值。层次分隔符。设置为 false 以将键视为文字值。

  • const schema = Joi.object({ ... }).and("registration_number", "current_mileage");
    

    关于javascript - 通过将选项传递给架构,使所有字段或某些字段成为必需字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61863671/

    相关文章:

    javascript - 边框颜色不会改变

    javascript - 扩展 Joi 未实现自定义运算符

    javascript - 如何使用 JOI 验证来验证嵌套 json 对象的某些字段

    javascript - 如何在此 HTML 中选择下一个 "select"(下拉列表)?

    javascript - prototype.constructor 和 object of itself 有什么区别?

    javascript - jQuery.data() 适用于 Mac OS WebKit,但不适用于 iPhone OS?

    javascript - 如何为我的剪刀石头布游戏编写一组更简洁的代码?

    node.js - 如何使用自定义消息设置 Joi 验证?

    sequelize.js - 如何使用 HapiJS Joi 和 SequelizeJS 剥离未知?