首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Nodejs的AJV验证

基于Nodejs的AJV验证
EN

Stack Overflow用户
提问于 2022-04-23 09:11:45
回答 2查看 579关注 0票数 0

如果设置了allRequired关键字,我将得到一个错误。如果没有给出,就没有错误。文档指出,必须将此关键字赋予对象类型。如果没有得到验证,即使输入错误(通过邮递员测试),验证也会通过。

下面是模式,它是从另一个文件导出的:

代码语言:javascript
复制
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;

错误消息:

代码语言:javascript
复制
Error: strict mode: unknown keyword: "allRequired"

验证

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

发布于 2022-04-23 09:50:13

JSON模式中没有allRequired属性。我在规格说明这里找的。它不在那里。那么,您指的是哪些文档呢?

据我所知,没有allRequired属性。

但是,如果要生成所需的所有属性,则需要指定一个名为required的属性。它是一个数组,所需的字段名作为元素。所以,在你的例子中,应该是:

代码语言:javascript
复制
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模块的一部分。您需要按以下方式初始化它:

代码语言:javascript
复制
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;
}
票数 1
EN

Stack Overflow用户

发布于 2022-04-23 11:14:13

更新

还有其他的错误。key名称必须与方案中给定的名称相同,否则验证将无法工作。

示例:

代码语言:javascript
复制
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',
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71978324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档