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

部署带swagger-ui-express的Express API到AWS Lambda后Swagger文档无法访问

解决AWS Lambda+API Gateway下Swagger UI路径跳转403问题

问题核心是swagger-ui-express默认重定向路径未携带API Gateway的阶段前缀(如dev),导致访问/dev/docs时自动跳转到/docs触发403。以下是具体解决步骤:

1. 配置Swagger文档的Base路径

在Swagger定义文件(如swagger.json)中添加servers字段指定阶段前缀,确保Swagger UI生成的接口请求路径正确:

{
  "openapi": "3.0.0",
  "info": { ... },
  "servers": [
    {
      "url": "/dev"
    }
  ],
  "paths": { ... }
}

如果需要兼容本地和部署环境,可通过代码动态生成servers配置,读取环境变量中的阶段名:

const stage = process.env.STAGE || 'dev';
swaggerDocument.servers = [{ url: `/${stage}` }];

2. 初始化Swagger UI时指定BasePath

在Express应用挂载swagger-ui-express时,通过swaggerOptions明确设置basePath,避免重定向丢失阶段前缀:

const swaggerUi = require('swagger-ui-express');
const swaggerDocument = require('./swagger.json');

const stage = process.env.STAGE || 'dev';
const swaggerOptions = {
  swaggerOptions: {
    basePath: `/${stage}`
  }
};

// 挂载时使用带阶段前缀的路径
app.use(`/${stage}/docs`, swaggerUi.serve, swaggerUi.setup(swaggerDocument, swaggerOptions));

3. 验证API Gateway Proxy配置

确保API Gateway的{proxy+}资源配置无误:

  • 资源路径设置为/{proxy+}
  • 已启用Lambda代理集成
  • 方法请求允许GET方法访问/docs相关路径
  • 阶段部署的路径前缀(dev)已正确关联到Lambda集成

完成以上配置后,访问/dev/docs时Swagger UI会正确保留阶段前缀,不会跳转到根路径的/docs,即可正常加载接口文档。

内容的提问来源于stack exchange,提问作者Juan Pablo Betancourt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:52:37