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

TypeScript+Express集成Swagger报错:SwaggerUIBundle未定义求助

TypeScript Express集成Swagger报错解决方案

问题场景

在TypeScript开发的Express项目中集成Swagger,实现代码如下:

...
import swaggerJsDoc from 'swagger-jsdoc'
import swaggerUi from 'swagger-ui-express'

...

const swaggerDefinition ={
    openapi:'3.0.0',
    info:{
        title:'Swagger Test API',
        version:'1.0.0',
    }
}
const options={
    swaggerDefinition,
    apis:['./src/api/routes/*.ts'],
    server:['http://localhost:3000']
}
const swaggerSpec = swaggerJsDoc(options)

app.use('/swagger',swaggerUi.serve,swaggerUi.setup(swaggerSpec))

已安装swagger-jsdoc和swagger-ui-express依赖,但启动开发服务器后出现报错:

Uncaught SyntaxError: Unexpected token '<' (at swagger-ui-bundle.js:3:1)
swagger-ui-standalone-preset.js:3 
Uncaught SyntaxError: Unexpected token '<' (at swagger-ui-standalone-preset.js:3:1)
Uncaught ReferenceError: SwaggerUIBundle is not defined
    at window.onload 

解决步骤

  • 调整路由顺序:报错中的&lt;是HTML转义后的<,说明Swagger UI的静态JS文件被返回了HTML(大概率是404页面)。需将app.use('/swagger', ...)代码放在所有其他路由定义之前,尤其是处理404的通配符路由(如app.get('*', ...))之前。
  • 修正配置参数:options中的server参数无效,swagger-jsdoc要求服务器配置放在swaggerDefinition中,且字段为复数servers:
    const swaggerDefinition = {
        openapi: '3.0.0',
        info: {
            title: 'Swagger Test API',
            version: '1.0.0',
        },
        servers: [
            { url: 'http://localhost:3000' }
        ]
    }
    const options = {
        swaggerDefinition,
        apis: ['./src/api/routes/*.ts'],
    }
    
  • 校验文件路径:若项目先编译TS到dist目录再运行,需将apis路径指向编译后的JS文件:
    apis: ['./dist/api/routes/*.js']
    
  • 重置依赖:若依赖包损坏导致静态资源加载异常,执行以下命令重置:
    rm -rf node_modules package-lock.json
    npm install
    

问题说明

这类报错并非Swagger官方已知问题,基本都是路由顺序错误、配置参数误用或文件路径不匹配导致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:07:21