使用 ajv 验证 json 模式时获取错误类型/值
Posted
技术标签:
【中文标题】使用 ajv 验证 json 模式时获取错误类型/值【英文标题】:Getting error type/value when validating json schema with ajv 【发布时间】:2018-01-22 00:49:43 【问题描述】:我正在尝试使用 json 模式来验证 api 的 json。
我找到了 ajv 库,它似乎是 node.js 中最受欢迎的。
刚刚获得基础知识,我已将架构定义为
const viewSchema =
"type": "object",
"properties":
"title": "type": "string"
export default viewSchema;
然后我将它导入到我的验证器中
import Ajv from 'ajv';
import viewSchema from './viewSchema';
const ajv = Ajv(allErrors: true);
let validate = ajv.compile(viewSchema);
const validateView = viewJson =>
var isValid = validate(viewJson);
console.log('------ text',ajv.errorsText(), isValid)
if(isValid) return true;
return ajv.errorsText();
export default validateView;
并使用 mocha (with mochaccino) 测试输出
describe('validate view', () =>
it('should error if title is not a string', () =>
console.log('-----------',validateView("title":122))
expect(validateView("title":122).errors).toContain('should be string');
);
);
按照ajv github page 的指示,我希望我的测试会失败,因为所需的类型是字符串并且我提供了一个数字。但是我从ajv.errorsText()
得到的响应是No Errors
,它应该提供一个错误。
看起来很简单,我做错了什么?
【问题讨论】:
【参考方案1】:您需要将错误传递给ajv.errorsText()
:
ajv.errorsText(validate.errors)
如果你使用方法ajv.validate
,如果没有参数,它会返回错误文本。
见https://github.com/epoberezkin/ajv#errorstextarrayobject-errors--object-options---string
【讨论】:
谢谢,主要文档上写着if (!valid) console.log(ajv.errorsText());
,所以我就这么做了。
是的,在它使用 ajv.validate 的情况下。需要在前面的例子中添加errorsText。以上是关于使用 ajv 验证 json 模式时获取错误类型/值的主要内容,如果未能解决你的问题,请参考以下文章