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

Express服务器Swagger文档不生效及TS配置问题咨询

问题排查及解决方案

一、「No Operations defined in spec!」报错原因及修复

  • 配置缺失openapi版本声明
    swagger-jsdoc 6.x及以上版本要求在definition中明确指定openapi版本,否则会出现注解解析失败问题,需要补充配置:
const swaggerOptions: Options = {
   definition: {
      openapi: "3.0.0", // 补充这一行
      info: {
         title: "Project Nonya Documentation.",
         description: "Documentation for the Project Nonya API",
         contact: {
            name: "Joe Mama",
         },
         version: "6.9.0",
      },
   },
   apis: ["./routes/*.routes.ts"],
};
  • 路由文件后缀匹配错误
    你配置的apis规则是./routes/*.routes.ts,但实际路由文件命名为testing.router.ts,后缀是.router.ts而非.routes.ts,规则无法匹配到对应文件,自然读不到注解。
    修复:把匹配规则修改为对应后缀,比如./src/routes/*.router.ts

  • 相对路径解析错误
    你的docs.ts放在src目录下,如果项目启动入口在项目根目录(比如执行node dist/router.js或ts-node src/router.ts),相对路径./routes/会被解析为根目录下的routes文件夹,而非src下的routes文件夹,导致找不到文件。
    修复:把apis路径写全src层级,或者直接配置为绝对路径。

  • Swagger注解与实际路由不匹配
    你注解里声明的是GET /接口,但实际定义的是POST /testing/:id接口,Swagger不会自动把注解和实际路由做关联,需要保证注解里的请求方法、路径和实际路由一致,修复示例:

/**
 * @swagger
 * /testing/{id}:
 *   post:
 *     description: 测试接口
 *     parameters:
 *       - name: id
 *         in: path
 *         required: true
 *         schema:
 *           type: string
 *     responses:
 *       200:
 *         description: 接口正常返回
 */
router.post("/testing/:id", testing);

二、后缀匹配问题解答

分两种场景处理:

  • 开发环境用ts-node直接运行TS代码:需要匹配.ts后缀才能读到注解
  • 生产环境编译为JS后运行:需要匹配.js后缀才能读到编译后文件中的注解
    最优配置是直接配置同时匹配两种后缀,开发和生产环境都可以生效:
apis: ["./src/routes/*.router.{ts,js}"],

如果编译后dist目录结构和src一致,也可以根据实际编译输出调整为匹配dist目录下的js文件。

内容的提问来源于stack exchange,提问作者darkstar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:36:04