Fastify v3升级v4后使用fastify-openapi-glue遇AJV严格模式报错
解决Fastify v4 + fastify-openapi-glue的AJV严格模式错误
问题根源
Fastify v4升级后,AJV的配置方式发生了变化,且fastify-openapi-glue插件默认启用AJV严格模式,而你的OpenAPI Schema中包含example关键字(AJV strict模式下不允许未知关键字),导致验证失败。此外,插件可能不会自动继承Fastify全局的AJV配置,需要显式传递相关选项。
两种可行解决方案
方案1:全局配置Fastify的AJV选项
在创建Fastify实例时,直接配置AJV禁用严格模式,所有依赖AJV的插件都会生效:
const fastify = require('fastify')({ logger: true, ajv: { customOptions: { strict: false, strictSchema: false // 也可单独禁用strictSchema来解决问题 } } });
方案2:给fastify-openapi-glue插件单独配置AJV
如果不想全局修改AJV配置,可以在注册插件时显式传递ajvOptions:
const path = require('path'); const fastifyOpenapiGlue = require('fastify-openapi-glue'); fastify.register(fastifyOpenapiGlue, { specification: path.join(__dirname, '../openapi.yaml'), ajvOptions: { strict: false, strictSchema: false } });
为什么之前的配置被忽略?
Fastify v4将AJV配置统一放在顶级的ajv.customOptions下,而fastify-openapi-glue在v4环境中可能不会自动读取全局AJV配置(插件内部可能创建了独立的AJV实例),因此需要显式在插件注册时传递配置,或者确保全局AJV配置的结构正确。
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

