如果设置了allRequired关键字,我将得到一个错误。如果没有给出,就没有错误。文档指出,必须将此关键字赋予对象类型。如果没有得到验证,即使输入错误(通过邮递员测试),验证也会通过。
下面是模式,它是从另一个文件导出的:
const ticketSchema = {
type: 'object',
properties: {
firstName: {
type: 'string',
minLength: 1,
},
lastName: {
type: 'string',
minLength: 1,
},
ticketId: {
type: 'string',
minLength: 6,
maxLength: 6,
},
},
allRequired: true, // <---- error occurs here
};
export default ticketSchema;错误消息:
Error: strict mode: unknown keyword: "allRequired"验证
const ajv = new Ajv();
const validateTicket = ajv.compile(ticketSchema);
const ticket = {
'first-name': firstName,
'last-name': lastName,
'route-id': routeID,
};
const valid = validateTicket(ticket);
if (!valid) {
res.status(422).send(validateTicket.errors);
return;
}发布于 2022-04-23 09:50:13
JSON模式中没有allRequired属性。我在规格说明这里找的。它不在那里。那么,您指的是哪些文档呢?
据我所知,没有allRequired属性。
但是,如果要生成所需的所有属性,则需要指定一个名为required的属性。它是一个数组,所需的字段名作为元素。所以,在你的例子中,应该是:
const ticketSchema = {
type: 'object',
properties: {
firstName: {
type: 'string',
minLength: 1,
},
lastName: {
type: 'string',
minLength: 1,
},
ticketId: {
type: 'string',
minLength: 6,
maxLength: 6,
},
},
required: ['firstName', 'lastName', 'ticketId']
};更新:
allRequired不是JSON规范的一部分。它是ajv-keywords模块的一部分。您需要按以下方式初始化它:
const Ajv = require('ajv');
const ajv = new Ajv();
require('ajv-keywords')(ajv);
const validateTicket = ajv.compile(ticketSchema);
const ticket = {
'first-name': firstName,
'last-name': lastName,
'route-id': routeID,
};
const valid = validateTicket(ticket);
if (!valid) {
res.status(422).send(validateTicket.errors);
return;
}发布于 2022-04-23 11:14:13
更新
还有其他的错误。key名称必须与方案中给定的名称相同,否则验证将无法工作。
示例:
const scheme = {
type: 'object',
properties: {
firstName: {
type: 'string',
},
lastName: {
type: 'string',
},
},
};
// correct - key names are the same
data = {
firstName: 'Alex',
lastName: 'Smith',
};
// incorrect - key names aren't the same
data = {
'first-name': 'Alex',
'last-name': 'Smith',
};https://stackoverflow.com/questions/71978324
复制相似问题