使用 Fastify 和 AJV 验证请求模式

Mik*_*ing 2 validation json jsonschema ajv

背景

我正在使用 Fastify 构建 API,这是我第一次使用 JSON 模式验证。我们的想法是,它既可以提高服务器代码的效率,又可以帮助我们的开发人员学习如何使用我的 API。

问题

我正在尝试验证允许客户端仅按名称查询小猫的路由。一个成功形成的查询看起来是/kittens?name=fluffykins

我这条路线的架构如下所示:

{
  querystring: {
    type: 'object',
    name: { type: 'string' },
  }
}
Run Code Online (Sandbox Code Playgroud)

如何让我的模式验证器只接受查询name并拒绝其他查询,例如/kittens?age=1?我更喜欢模式验证器独立于我的控制器代码处理它,并且它还支持我们将来可能添加的查询。

谢谢!

Mik*_*ing 6

正如我向 SO 发布问题时的典型情况一样,不久之后我自己就找到了答案。以下是对我有用的方法,但我仍然很想知道是否有其他更好的方法可以做到这一点!

{
  querystring: {
    type: 'object',
    properties: {
        name: { type: 'string' }
    },
    anyOf: [
      {
        required: [ 'name' ]
      }
    ],
  },
}
Run Code Online (Sandbox Code Playgroud)