2017-08-18 4 views
0

私は次のコードを書いています。AjvにキーワードNullable(またはallowNull)を追加するには?

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 

しかし、動作しません。そのようなバリデータを書くには?

コンパイル関数が常にtrueを返しても、それでも検証は成功しません。

コードは、ノード・サンドボックスでテストすることができます。 https://runkit.com/khusamov/59965aea14454f0012d7fec0

答えて

0

あなたはtypeキーワードをオーバーライドすることはできません。 nullはJSONでは別のデータ型なので、スキーマで"type": ["string", "null"]を使用する必要があるため、カスタムキーワードを使用する必要はありません。

+0

スワッガー形式のキーワードを2つ作成する必要があります。 nullableとdescriminatorなど。だから私はこれをキーワードの形で必要としています。スキームは変更できません。 –

+0

これはインラインキーワードで行うことができますが、かなり複雑です。 https://github.com/epoberezkin/ajv/issues/486 – esp

+0

を参照してください。問題を読んでいます。私が正しく理解していれば、解決策はありませんし、そうではありませんか? –

関連する問題