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

OpenAPI Generator生成JS SDK调用Express接口遇错误求助

问题:OpenAPI生成的SDK在浏览器模块中无法导出DefaultApi

我搭建了一个极简全栈应用测试OpenAPI SDK Generator,已尽可能简化配置但仍遇到导入错误。

项目结构

  • api/
    • docs/
      • index.yaml(OpenAPI规范文件)
    • server.js(Express服务端代码)
  • client/
    • src/
      • api/(通过OpenAPI生成器生成的SDK目录)
      • index.js(客户端测试逻辑)
    • index.html(测试页面)

服务端代码(api/server.js)

const express = require("express")
const cors = require("cors")

const app = express();

app.use(cors());

app.get("/hi", (req, res) => {
    res.json({ message: "hi from the server" });
})

app.listen(3000, () => {
    console.log("server running on port 3000");
})

OpenAPI规范(api/docs/index.yaml)

openapi: 3.0.0
info:
  title: api
  description: This serves as a base for other REST API's
  version: 1.0.0
paths:
  /hi:
    get:
      description: Say hi to the server
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string

SDK生成命令(在client目录执行)

npx @openapitools/openapi-generator-cli generate -i ../api/docs/index.yaml -g javascript -o src/api

客户端测试代码

index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <main></main>
    <script type="module" src="./src/index.js"></script>
</body>

</html>

src/index.js

import { DefaultApi } from './api/src/index.js';

const api = new DefaultApi('http://localhost:3000');

const testConnection = async () => {
    console.log("testing connection...")
    const response = await api.hiGet()

    const data = await response.json()

    console.log(data)
}

testConnection()

报错信息

启动客户端本地服务后,浏览器控制台抛出:

Uncaught SyntaxError: The requested module './api/src/index.js' does not provide an export named 'DefaultApi'

解决方案

  1. 检查生成的SDK导出结构
    进入client/src/api目录,查看index.js的内容。JavaScript生成器的默认导出可能不是DefaultApi,或者需要从具体文件导入。比如很多版本中,DefaultApi是单独在DefaultApi.js文件中导出的,此时需要修改导入路径:

    import { DefaultApi } from './api/src/DefaultApi.js';
    
  2. 生成ES6兼容的SDK
    生成命令中添加参数,确保生成适配浏览器模块系统的代码:

    npx @openapitools/openapi-generator-cli generate -i ../api/docs/index.yaml -g javascript -o src/api --additional-properties=supportsES6=true,useFetch=true
    
    • supportsES6=true:启用ES6模块语法
    • useFetch=true:使用浏览器原生fetch代替axios(避免额外依赖)
  3. 修正实例化方式
    部分版本的生成器要求通过配置对象传入baseURL,而不是直接传字符串:

    const api = new DefaultApi({ basePath: 'http://localhost:3000' });
    
  4. 检查响应处理逻辑
    生成的SDK方法可能已经直接返回解析后的JSON数据,不需要再调用.json():

    const testConnection = async () => {
        console.log("testing connection...")
        const data = await api.hiGet()
        console.log(data)
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:05:22