我使用 Hapi.js 框架和 Joi 进行数据验证。我正在尝试使用 Joi 验证 JSON 文件。我已经定义了一个架构,并想检查 JSON 文件是否包含我的架构中的所有字段。
某些字符串字段可以为空。在我的架构文件中,当我将 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 }
}
如何修改此架构以处理空字符串?
最佳答案
如果您想允许空字符串,则需要使用 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));
使用joi.describe
后上述模式的输出是:
{
"type": "object",
"children": {
"name": {
"type": "string",
"valids": [
"",
null
],
"rules": [
{
"name": "min",
"arg": 0
}
]
},
"age": {
"type": "number",
"invalids": [
null,
null
],
"rules": [
{
"name": "min",
"arg": 1
},
{
"name": "max",
"arg": 36
}
]
},
"dob": {
"type": "string",
"invalids": [
""
],
"rules": [
{
"name": "min",
"arg": 0
},
{
"name": "max",
"arg": 100
}
]
}
}
}
关于string - 检查 Joi (hapi.js) 中的空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36765267/