2016-04-21 60 views
2

我正在使用Hapijs框架并使用Joi进行验证,我试图通过Joi验证来验证JSON文件。我已经定义了模式,并希望根据我的模式检查JSON文件是否具有字段。在hapijs中检查空字符串Joi

某些字符串字段可以为空。在我的模式文件中,当我将min定义为0时,它表示name是必填字段。

我使用下面的架构,并从文件

module.exports = { 
    "name": { "type": "string", "min": 0, "max": 30}, 
    "age": { "type": "number", "min": 1, "max": 36}, 
    "dob": { "type": "string", "min": 0, "max":100 } 
} 

如何修改这个模式这需要空字符串读书。

回答

2

如果你想允许空字符串,你需要明确地允许它们与joi.string().allow('')

var joi = require('joi'); 

var schema = joi.object().keys({ 
    name: joi.string().min(0).allow('').allow(null), 
    age: joi.number().min(1).max(36), 
    dob: joi.string().min(0).max(100) 
}); 

var obj = { 
    name: '', 
    age: '18', 
    dob: '11/11/2998' 
}; 

var result = joi.validate(obj, schema); 

console.log(JSON.stringify(result, null, 2)); 
+0

感谢您的回复Cuthbert ..但我想从文件中读取模式..就像在我的文章中显示的那样。我已经使用module.exports,然后定义架构。有什么办法可以在模式中使用.allow。 – user3656330

+0

想要使用JSON格式的原因是什么?这看起来不像'joi.compile()'所要求的语法。你有什么理由不能按照我在答案中给出的方式导出joi对象? – Cuthbert

+0

你使用的是enjoi吗? https://www.npmjs.com/package/enjoi – Cuthbert