首页 > 解决方案 > 使用 API 网关设置 swagger-ui-express

问题描述

我无法弄清楚我的 API 网关或 swagger-ui-express 的正确设置。lambda 函数运行成功并返回 html,但相关资源无法加载并出现 404 错误。

const app = express();
const swaggerUI = require('swagger-ui-express');
const serverlessExpress = require('@vendia/serverless-express');

const Stage = process.env.Stage;
const apiId = process.env.apiId;
const options = {
    customCss: '.swagger-ui .topbar { display: none }',
    customCss: '.swagger-ui .topbar { background-color: red }'
}

let serverlessExpressInstance

async function asyncTask() {
    // load latest spec from API Gateway export removed to simplicity reasons.
    const swaggerDocument = spec;
    console.log("load swagger file complete.");
    return swaggerDocument
}

async function setup(event, context) {
    const swaggerDocument = await asyncTask()
    console.log(swaggerDocument)

    app.use('/api-doc', swaggerUI.serveWithOptions({ redirect: false }));
    app.use('/api-doc', swaggerUI.setup(swaggerDocument, options));
    console.log("setup of swagger complete");

    serverlessExpressInstance = serverlessExpress({ app })
    return serverlessExpressInstance(event, context)
}

function handler(event, context) {
    if (serverlessExpressInstance) return serverlessExpressInstance(event, context)
    return setup(event, context)
}

exports.handler = handler

API Gateway 上的设置如下:

API 网关资源

这两个资源都指向 lambda 函数。当我通过以下方式加载页面时: https://.execute-api..amazonaws.com/dev/api-doc 出现以下错误:

错误日志

如何确保通过正确的路径正确加载资源 ...dev/api/doc/...

标签: expressaws-lambdaswaggeraws-api-gatewayswagger-ui

解决方案


推荐阅读