2017-01-09 2 views
0

Ich habe einen Post-Aufruf, der die Nutzlast als einzelnes JS Objekt sowie Array von Objekten nehmen kann, um es in der Datenbank zu speichern. Wie schreibe ich ein Schema, um diese Payload zu validieren?Hapi-Joi Validierung Nutzlast, die ein Array von Objekten oder einfach nur Javascript Objekt sein kann?

JS Objekt

{ 
    label: 'label', 
    key: 'key', 
    help_text: 'text' 
} 

Oder

[ 
{ 
    label: 'label1', 
    key: 'key1', 
    help_text:'text1' 
}, 
{ 
    label: 'label2', 
    key: 'key2', 
    help_text:'text2' 
} 
] 
+0

Zuerst analysieren Sie es von JSON. 'JSON.parse (jsObj)'; Dann prüfen, ob es sich um ein Array oder ein Objekt handelt. Seien Sie vorsichtig, ein Array ist auch ein Objekt. Für ein Array können Sie den Prototyp verwenden: 'Array.isArray (arr)'; Für ein Objekt können Sie das verwenden: 'Wert! == null && (typeof Wert === 'undefiniert'? 'Undefiniert': _typeof (Wert)) === 'Objekt';' – DomeTune

+0

Danke @DominikNoll Ich habe diese Logik bereits in meinem Handler segregiere ich alle Validierungs-Teile in separaten Dateien und validiere dann, wenn ich Routen innerhalb des Config-Objekts definiere. –

+0

Mh, als ich Ihre Frage nicht bekommen ... Sie möchten wissen, wie Sie die Routen benennen? Oder wollen Sie wissen, wie man das JS-Objekt in einer Funktion behandelt? @ Kailash yogeshwar – DomeTune

Antwort

5

du Joi.alternatives() mit erreichen können. Hier ist ein funktionierendes Beispiel:

const joi = require('joi'); 

var objectSchema = joi.object().keys({ 
    label: joi.string().required(), 
    key: joi.string().required(), 
    help_text: joi.string().required() 
}).unknown(false); 

var arraySchema = joi.array().items(objectSchema); 

var altSchema = joi.alternatives().try(objectSchema, arraySchema); 

var objTest = {label: 'cuthbert', key: 'something', help_text: 'helping!'}; 

var arrTest = [ 
    objTest 
]; 

var failingArrTest = [ 
    { 
     unknownProperty: 'Jake' 
    } 
]; 

var result = joi.validate(objTest, altSchema); 

var resultArrTest = joi.validate(arrTest, altSchema); 

var resultFailingArrTest = joi.validate(failingArrTest, altSchema); 

console.log(result); 

console.log(resultArrTest); 

console.log(resultFailingArrTest); 
+0

Ich werde das zuerst testen –

Verwandte Themen