[英]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.