2017-08-18 50 views
0

我寫了下面的代碼。如何將關鍵字Nullable(或allowNull)添加到Ajv中?

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

我需要爲揚鞭格式創建兩個關鍵字。如可空和歧視。所以我需要這個關鍵字的形式。該方案不能改變。 –

+0

它可以使用inline關鍵字來完成,但它涉及很多。見https://github.com/epoberezkin/ajv/issues/486 – esp

+0

我讀的問題。如果我理解正確,沒有解決方案,不會? –

相關問題