Fastify集成fastify-cors后swagger默认标签多出未配置OPTIONS接口如何解决
解决方案
方案1:配置fastify-cors隐藏自动生成的OPTIONS路由(最推荐)
fastify-cors插件本身提供hideOptionsRoute配置项,开启后自动生成的预检OPTIONS路由会被标记为隐藏状态,fastify-swagger默认不会渲染隐藏路由,仅需修改CORS插件注册代码即可:
fastify.register(require('fastify-cors'), { hideOptionsRoute: true // 新增该配置项 }); fastify.register(require('./routes/routes'));
如果配置后仍然展示OPTIONS接口,检查fastify-swagger的注册配置,确保exposeHiddenRoutes配置项为false(默认值即为false,无特殊需求不需要额外设置)。
方案2:配置fastify-swagger过滤OPTIONS类型接口
如果不需要修改CORS插件的配置,可以直接在swagger的注册逻辑中添加路由过滤规则,屏蔽所有OPTIONS方法的接口:
fastify.register(require('fastify-swagger'), { // 保留你原本的swagger配置,比如接口文档标题、描述、路由前缀等 // 新增transform配置过滤路由 transform: (schema) => { if (schema.method === 'OPTIONS') return null return schema } })
方案3:关闭自动生成预检路由,手动定义OPTIONS接口
如果需要完全控制预检路由的生成逻辑,可以关闭fastify-cors自动生成OPTIONS路由的能力,仅按需为需要的路径定义预检接口:
fastify.register(require('fastify-cors'), { preflight: false // 关闭自动生成预检路由的逻辑 }); // 后续可手动为需要跨域的路径添加OPTIONS路由,自定义swagger的展示规则
内容的提问来源于stack exchange,提问作者Pradip
相关产品推荐
相关产品推荐

