簡體   English   中英

通過將選項傳遞給架構來使所有字段或某些字段成為必填字段

[英]Make all fields or some of required by passing options to schema

我正在使用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()使它們單獨成為必需的。

但是我想通過將動態數據傳遞給模式 object 來使一些字段成為必需的。

就像,如果我只想像下面那樣只需要其中的幾個。

//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 object.and(...peers, [options])的文檔:

定義密鑰之間的全有或全無關系,如果存在一個對等方,則所有這些都需要,並且在以下情況下:

  • peers - 字符串鍵名稱,如果存在,則所有鍵名都是必需的。 選項
  • optional settings
    • separator - 覆蓋默認值。 層次分隔符。 設置為 false 將鍵視為文字值。
const schema = Joi.object({ ... }).and("registration_number", "current_mileage");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM