【发布时间】:2018-01-10 09:40:53
【问题描述】:
我正在尝试使用 jsonschema-master 来验证通过使用 express 的 POST 请求输入的 json 请求。请参阅下面的代码和示例。
如果属性标签丢失或拼写错误,例如“model”、“areas”、“id”,它会拾取,但如果这些属性的值符合规范,则不会拾取。例如,“model”属性被定义为“premium”或“basic”的枚举类型,但我似乎可以将任何旧字符串放在那里,无论如何它都会继续工作,坐标也被定义为类型编号,但它再次忽略了这一点,然后错误通过验证器并导致进一步的问题。不知道我错过了什么。
node.js 代码:
var Validator = require('jsonschema-master').Validator;
var v = new Validator();
var bodySchema = {
"model": {
"enum": [ "premium","basic" ]
},
"areas": {
"type":"array",
"items": {
"id": {"type": "string"},
"geometry": {
"type": { "type":"string"},
"coordinates": {
"type":"array",
"items": {
"type":"array",
"items": [
{"type":"number"},
{"type":"number"},
{"type":"number"}
]
}
},
"required" : ["type","coordinates"]
},
"required" : ["id","geometry"]
}
},
"required" : ["model","areas"]
};
var valResult = v.validate(doc.request, bodySchema);
if (valResult.errors.length) {
// Validation failed.
// All processing will now stop.
console.log('Request invalid: '+ doc._id +" - "+valResult.errors);
}
示例正确的 JSON 请求(在 doc.request 中)
{
"model": "premium",
"areas": [
{
"id": "1234",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
453600.0,
181100.0,
0
],
[
453600.0,
181200.0,
0
],
[
453700.0,
181200.0,
0
],
[
453700.0,
181100.0,
0
],
[
453600.0,
181100.0,
0
]
]
]
}
}
]
}
【问题讨论】:
标签: javascript json node.js express jsonschema