使用fastify/swagger时仅能识别/route2,无法识别/route1求解决
问题原因
@fastify/swagger 是通过监听 Fastify 的路由添加钩子来收集 API 元数据的,这个钩子只有在插件注册完成后才会生效。你在注册 swagger 插件之前就定义了 /route1,此时插件还没初始化,自然捕获不到这个路由的信息,而 /route2 是在插件注册后定义的,所以能被正常收录。
解决办法
把所有路由的定义都移到 swagger 插件注册之后,调整代码结构如下:
'use strict' const fastify = require('fastify')() const start = async () => { try { // 先注册 swagger 插件,确保钩子生效 await fastify.register(require('@fastify/swagger'), { openapi: { openapi: '3.0.3', info: { title: '示例API文档', version: '1.0.0' } // 补充你需要的其他 openapi 配置 } }) // 现在定义所有路由,包括 /route1 和 /route2 fastify.get('/route1', async (request, reply) => { return { route1: 'world' }; }); fastify.get('/route2', async (request, reply) => { return { route2: 'world' }; }); // 移除未定义的 opts 参数,避免报错 fastify.get('/doc', async (request, reply) => { reply.send(fastify.swagger()) }); await fastify.ready() await fastify.listen({ port: 3000 }); console.log(`Server listening on ${fastify.server.address().port}`); } catch (err) { console.log(err); process.exit(1); } }; start();
另外注意:你的 /doc 路由里用到了未定义的 opts 参数,建议直接移除,否则运行时会报错。
内容的提问来源于stack exchange,提问作者Dennys
相关产品推荐
相关产品推荐

