You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:00:31