NestJS集成Swagger调用createDocument报getVersioning非函数错误
问题现象
- 重新安装
@nestjs/swagger、swagger-ui-express依赖包,将项目所有依赖更新至最新版本,同步修改tsconfig.ts中metadata相关配置项后,服务运行报错 - 调试确认
SwaggerModule类的createDocument函数调用前所有代码运行正常,所有配置项可正确读取,一旦执行createDocument方法,API服务直接崩溃 - 核心报错信息:
applicationConfig.getVersioning is not a function at SwaggerExplorer.exploreRoutePathAndMethod - 完整错误堆栈:
/home/prasanna/my_project/TapisProject/API/API/node_modules/@nestjs/swagger/dist/swagger-explorer.js:125 const controllerVersion = this.getVersionMetadata(metatype, applicationConfig.getVersioning()); ^ TypeError: applicationConfig.getVersioning is not a function at SwaggerExplorer.exploreRoutePathAndMethod (/home/prasanna/my_project/TapisProject/API/API/node_modules/@nestjs/swagger/dist/swagger-explorer.js:125:87) at /home/prasanna/my_project/TapisProject/API/API/node_modules/@nestjs/swagger/dist/swagger-explorer.js:72:45 at Array.reduce () at /home/prasanna/my_project/TapisProject/API/API/node_modules/@nestjs/swagger/dist/swagger-explorer.js:71:99 at /home/prasanna/my_project/TapisProject/API/API/node_modules/lodash/lodash.js:13469:38 at /home/prasanna/my_project/TapisProject/API/API/node_modules/lodash/lodash.js:4967:15 at baseForOwn (/home/prasanna/my_project/TapisProject/API/API/node_modules/lodash/lodash.js:3032:24) at Function.mapValues (/home/prasanna/my_project/TapisProject/API/API/node_modules/lodash/lodash.js:13468:7) at MapIterator.iteratee (/home/prasanna/my_project/TapisProject/API/API/node_modules/@nestjs/swagger/dist/swagger-explorer.js:71:45) at MapIterator.next (/home/prasanna/my_project/TapisProject/API/API/node_modules/iterare/src/map.ts:9:39)
根因分析
@nestjs/swagger版本与NestJS核心包版本不匹配。高版本@nestjs/swagger的路由解析逻辑依赖@nestjs/core中ApplicationConfig实例的getVersioning()方法,更新依赖时如果仅升级swagger相关包,未同步升级@nestjs/common、@nestjs/core等NestJS核心套件,核心包中不存在该方法,就会触发上述类型错误。
修复步骤
- 同步升级NestJS核心依赖到与当前
@nestjs/swagger匹配的版本,根据自己使用的包管理器执行对应命令:- npm用户执行:
npm install @nestjs/common@latest @nestjs/core@latest @nestjs/platform-express@latest - pnpm用户执行:
pnpm add @nestjs/common@latest @nestjs/core@latest @nestjs/platform-express@latest - yarn用户执行:
yarn add @nestjs/common@latest @nestjs/core@latest @nestjs/platform-express@latest
- npm用户执行:
- 如果升级后仍存在异常,先删除项目下的
node_modules目录、对应包管理器的锁文件(package-lock.json/pnpm-lock.yaml/yarn.lock),重新执行全量依赖安装 - 依赖安装完成后重启项目,swagger文档生成逻辑即可恢复正常
内容的提问来源于stack exchange,提问作者Prasanna
相关产品推荐
相关产品推荐

