簡體   English   中英

如何使用 Joi 驗證 object 鍵的值是否應該出現在另一個 object 中?

[英]How to validate that object key's value should present in another object using Joi?

我正在使用Joi進行 object dalidation。
假設我的對象是

global_object = [
    {"id": 1, "name": "Alok"},
    {"id": 2, "name": "Ajay"},
    {"id": 3, "name": "Ankit"},
]

// valid object because id is present in global_object
object1 = {
    "id": 2,
    "country": "India"
}

// invalid object because id is not present in global_object
object2 = {
    "id": 7,
    "country": "India"
}

我想向這個object1object2添加驗證,即id的值應該使用joi出現在global_object中。

這可以使用Joi.any().valid()

var schema = Joi.object({
    id: Joi.any().valid(...global_object.map(e=>e['id'])),
    country: Joi.string()
})

console.log(schema.validate(object1)) // valid case
console.log(schema.validate(object2)) // this will show error as its invalid

這里是 output

> console.log(schema.validate(object1))
{ value: { id: 2, country: 'India' } }
undefined
> console.log(schema.validate(object2))
{ value: { id: 7, country: 'India' },
  error:
   { ValidationError: "id" must be one of [1, 2, 3]
     _original: { id: 7, country: 'India' },
     details: [ [Object] ] } }
undefined
>

您可以使用 JavaScript Array.prototype.some()

代碼:

 const global_object = [ {"id": 1, "name": "Alok"}, {"id": 2, "name": "Ajay"}, {"id": 3, "name": "Ankit"}, ] const object1 = { "id": 2, "country": "India" } const object2 = { "id": 7, "country": "India" } const isValid = obj => global_object.some(go => go.id === obj.id) console.log(isValid(object1)) console.log(isValid(object2))

暫無
暫無

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

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