#node.js #json-schema-validator #ajv
#node.js #json-schema-validator-проверка схемы #ajv
Вопрос:
Как мы можем проверить правильность написанной схемы или нет.
const schema = {
"properties": {
"foo": { "add": "string" , "minLenfeffgth": 3, "maxLefngth": 255 }
}
};
упомянутая выше схема является допустимой схемой в соответствии с ajv.validateSchema()
.
подобно тому, как мы проверяем данные, есть любая функция, которая проверяет схему.
завершите код :
var Ajv = require('ajv');
var ajv = new Ajv({ allErrors: true});
const schema = {
"properties": {
"foo": { "add": "string" , "minLenfeffgth": 3, "maxLefngth": 255 }
}
};
// console.log(ajv.validateSchema(schema));
var validate = ajv.compile(schema);
test({"foo": ""});
function test(data) {
var valid = validate(data);
if (valid) console.log('Valid!');
else console.log(validate.errors);
}
результат: действительный
Ответ №1:
Вы можете настроить Ajv на выдачу ошибок и использовать compile
:
var ajv = new Ajv({
allErrors: true
});
var schema = {
type: 'object',
properties: {
date: {
type: 'unexisting-type'
}
}
};
try {
var validate = ajv.compile(schema);
} catch (e) {
console.log(e.message);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/ajv/6.6.2/ajv.min.js"></script>
Комментарии:
1. пожалуйста, взгляните: gist.github.com/cmaliwal/8c99e68b8b404596753256b356dc8080
Ответ №2:
упомянутая выше схема является допустимой схемой в соответствии с ajv.validateSchema().
Это допустимо, но ничего не подтвердило, если вы хотите протестировать простой объект с foo
обязательным свойством, вы можете сделать что-то вроде этого :
var ajv = new Ajv({
allErrors: true
});
var schema = {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3,
"maxLength": 255
}
},
"required": [
"foo"
]
};
try {
var validate = ajv.compile(schema);
test({"foo": "" });
} catch (e) {
console.log("Validate error :" e.message);
}
function test(data) {
var valid = validate(data);
if (valid) {
console.log('Valid!');
} else {
console.log(validate.errors);
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/ajv/6.6.2/ajv.min.js"></script>
Запуск с данными = {"foo": "" }
возвращает приведенное ниже сообщение об ошибке :
[
{
"keyword": "minLength",
"dataPath": ".foo",
"schemaPath": "#/properties/foo/minLength",
"params": {
"limit": 3
},
"message": "should NOT be shorter than 3 characters"
}
]
Выполнить с данными = {"foo": "abcdef" }
верните сообщение ниже :
Допустимо!