2016-05-12 11 views
0

Ich habe ein Joi Schema wie folgt aus:Joi Schemavalidierung: Joi.object definieren gültige Schlüssel aus einem Array

var schema = Joi.object().keys({ filter: Joi.object({ }) }) 

Dann habe ich alle gültigen Schlüssel für Filter-Objekt in einem separaten Array validKeys genannt.

Ich möchte valueKeys mit Filter-Objekt verweisen. Sonst müsste ich die erlaubten Werte wie folgt hart codieren:

var schema = Joi.object().keys({ filter: Joi.object({ allowed1:Joi.string(), allowed2: Joi.string(), ... }) }) 

was ich nicht machen möchte. Ist das mit Joi oder anderen Javascript-Tools möglich?

Antwort

0

Ich bin nicht wirklich sicher, wie Ihr Array aussieht, aber wenn Sie zuerst Ihr Filterschema und dann Ihr endgültiges Schema einrichten, können Sie Ihre Schlüssel durchlaufen und sie Ihrem Filterschema dynamisch hinzufügen (vorausgesetzt, sie Alle sollen Saiten sein.

const joi = require('joi'); 

// not sure what valid key structure is like.. 
const validkeys = ['allowed1', 'allowed2', 'allowed3']; 

// set up filter schema first. 
let filterschema = {}; 

for (let i = 0; i < validkeys.length; i++) { 
    filterschema[validkeys[i]] = joi.string(); 
} 

// set up the final schema 
let finalschema = joi.object().keys({ 
    filter: filterschema 
}); 

// test 
let testobj = { 
    filter: { 
     allowed1: 'cuthbert', 
     allowed2: 'susan', 
     allowed5: 'jake' // should NOT be allowed. 
    } 
}; 

let result = joi.validate(testobj, finalschema); 

// should fail because key allowed5 isn't defined in filter schema. 
console.log(JSON.stringify(result, null, 2)); 
Verwandte Themen