2017-07-18 1 views
1

J'essaie de valider que les données que je suis retourné sont sensées. La validation des types de données est terminée. Maintenant, je veux valider que j'ai reçu toutes les données nécessaires pour effectuer une tâche.Valider l'intégrité référentielle des tableaux d'objets avec Joi

Voici un exemple représentatif:

{ 
    "things": [ 
    { 
     "id": "00fb60c7-520e-4228-96c7-13a1f7a82749", 
     "name": "Thing 1", 
     "url": "https://lolagons.com" 
    }, 
    { 
     "id": "709b85a3-98be-4c02-85a5-e3f007ce4bbf", 
     "name": "Thing 2", 
     "url": "https://lolfacts.com" 
    } 
    ], 
    "layouts": { 
    "sections": [ 
     { 
      "id": "34f10988-bb3d-4c38-86ce-ed819cb6daee", 
      "name": "Section 1", 
      "content:" [ 
      { 
       "type": 2, 
       "id": "00fb60c7-520e-4228-96c7-13a1f7a82749" //Ref to Thing 1 
      } 
      ] 
     } 
    ] 
    } 
} 

Ainsi, chaque section: toutes les références 0+, et je veux vérifier que chaque valeur id retournée dans le contenu des sections existe également un id dans les choses.

Les documents pour Object.assert(..) impliquent que j'ai besoin d'une référence concrète. Même si je fais la validation dans les objets Object.keys ou Array.items, je ne peux pas résoudre la référence à l'autre extrémité.

Ce n'est pas important, mais mon contexte est que je valide les réponses HTTP au sein de IcedFrisby, une fourchette Frisby.js.

Répondre

0

Ce n'était pas vraiment solvable de la façon dont je l'ai demandé (c'est-à-dire avec Joi).

Je résolus pour mon contexte en écrivant un plugin pour icedfrisby (publié le NPM here) qui utilise jsonpath pour aller chercher chaque id dans le contenu et chaque id dans les choses. Le plugin va alors affirmer que tous les premiers ensembles existent dans la seconde.