2017-08-18 2 views
0

Ich schrieb den folgenden Code.Wie Schlüsselwort Nullable (oder allowNull) in Ajv hinzufügen?

var ajv = new require('ajv'); 

ajv.addKeyword('allowNull', { 
    type: 'null', 
    metaSchema: { 
     type: 'boolean' 
    }, 
    compile: function(allowNullEnable, parentSchema) { 
     return function(data, dataPath, parentData) { 
      if (allowNullEnable) { 
       return true; 
      } else { 
       if (parentSchema.type == 'null') { 
        return true; 
       } else { 
        return data === null ? false : true; 
       } 
      } 
     } 
    } 
}); 

var schema = { 
    type: "object", 
    properties: { 
    file: { 
     type: "string", 
     allowNull: true 
    } 
    } 
}; 

var data = { 
    file: null 
}; 

console.log(ajv.validate(schema, data)) // Expected true 

Aber es funktioniert nicht. Wie schreibt man einen solchen Validator?

Auch wenn die Kompilierfunktion immer true zurückgibt, besteht sie die Validierung noch nicht. https://runkit.com/khusamov/59965aea14454f0012d7fec0

Antwort

0

Sie überschreiben können nicht type Stichwort:

Der Code kann in der Node-Sandbox getestet werden. null ist ein separater Datentyp in JSON, daher müssen Sie in Ihrem Schema "type": ["string", "null"] verwenden. Es ist nicht erforderlich, ein benutzerdefiniertes Schlüsselwort zu verwenden.

+0

Ich muss zwei Schlüsselwörter für das Swagger-Format erstellen. Wie Nullable und descriminator. Ich brauche das also in Form eines Schlüsselworts. Das Schema kann nicht geändert werden. –

+0

Es kann mit Inline-Schlüsselwort getan werden, aber es ist ziemlich beteiligt. Siehe https://github.com/epoberezkin/ajv/issues/486 – esp

+0

Ich habe das Problem gelesen. Wenn ich richtig verstehe, gibt es keine Lösung und wird es nicht sein? –