在无服务器的 Express 应用程序中使用 swagger 多次重定向到 swagger 端点

2024-05-27

我正在使用express-serverless制作一个应用程序,我想在离线开发期间使用swagger-jsdoc和swagger-ui-express。 这是我的 swagger 配置:

const express = require('serverless-express/express');
const router = express.Router();

const options = {
    swaggerDefinition: {
        info: {
            title: 'REST - Swagger',
            version: '1.0.0',
            description: 'REST API with Swagger doc',
            contact: {
                email: '[email protected] /cdn-cgi/l/email-protection'
            }
        },
        tags: [
            {
                name: 'Stuff',
                description: 'Stuff API'
            }
        ],
        schemes: ['http'],
        host: 'localhost:9002',
        basePath: '/docs'
    },
    apis: ['./**/route.js']
}

const swaggerJSDoc = require('swagger-jsdoc');
const swaggerUi = require('swagger-ui-express');
const swaggerSpec = swaggerJSDoc(options);
require('swagger-model-validator')(swaggerSpec);

router.get('/api-docs.json', function (req, res) {
    res.setHeader('Content-Type', 'application/json');
    res.send(swaggerSpec);
})

router.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));

function validateModel(name, model) {
    const responseValidation = swaggerSpec.validateModel(name, model, false, true)
    if (!responseValidation.valid) {

        console.error(responseValidation.errors);
        throw new Error(`Some error`)
    }
}

module.exports = {
    router,
    validateModel
}

在 handler.js 文件中:

// ... some imports and code
app.use("/", index);
// ... others routes

// Swagger
app.use("/docs", swagger.router); // <-- it refers to the configuration above 

exports.handler = handler(app);

当我访问时http://localhost:9002/docs/api-docs.json http://localhost:9002/docs/api-docs.json我得到了配置 JSON,但是如果我访问http://localhost:9002/docs/api-docs http://localhost:9002/docs/api-docs我多次重定向到同一个 url,但从未显示 Swagger 界面。

UPDATE

抱歉我的错误,我正在使用 serverless-express/express 而不是express

任何帮助,将不胜感激。 提前致谢!


我找到了这个替代解决方案:

  1. 我下载了 swagger-uihttps://github.com/swagger-api/swagger-ui https://github.com/swagger-api/swagger-ui

  2. 将 dist 文件夹复制到我的 Express 应用中的公共文件夹中

  3. 将文件夹名称“dist”更改为“api-docs”

  4. 并在“api-docs”文件夹中的index.html中更改行

    url = "http://petstore.swagger.io/v2/swagger.json http://petstore.swagger.io/v2/swagger.json";

to:

url: "http://localhost:9002/api-docs.json",

现在当我访问http://localhost:9002/api-docs/index.html http://localhost:9002/api-docs/index.html我可以看到 swagger-ui 页面工作正常!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在无服务器的 Express 应用程序中使用 swagger 多次重定向到 swagger 端点 的相关文章

  • 如何模拟“焦点”和“打字”事件

    尝试模拟 onfocus 和打字事件 但它不起作用 Sub Login MyLogin MyPass Dim IEapp As InternetExplorer Dim IeDoc As Object Dim ieTable As Obje
  • Nodejs - 处理和发送多部分请求,

    我的应用程序在 Nodejs 服务器上运行 Node Js 还充当来自应用程序的请求的中间件 代理 因此 从浏览器开始 所有 REST 调用都会转到 NodeJs 然后转到 Java API 我发现处理多部分表单数据的请求时出现问题 我在
  • Angular2 + Laravel 与实时和 WebSockets

    我构建了一个应用程序 并计划与 Angular 2 和 laravel 进行实时战斗 例如 你按下 攻击 按钮 你的对手就会实时看到他的生命在下降 我的应用程序构建有 前端 角2 Backend PHP Laravel 5 2 现在我正在寻
  • NodeJs 控制台中的 GET /bla - - ms - - 是什么意思?

    当我进入页面时 bla在我的 NodeJS 应用程序中 控制台打印出 GET bla ms 用文字来说 为了更容易谷歌搜索 dash dash ms dash dash 这是什么意思 这是输出morgan https github com
  • Typescript 找不到模块

    我在 Typescript 的一个文件 upload ts 中有一个导出的模块 我无法在没有错误的情况下导入到另一个文件 application ts 中 另外 我无法导入 ExpressJS 这是Upload ts
  • 如何使用 Web 套接字和 Angular CLI 设置代理

    我有一个使用 Angular CLI 构建的简单 Web 应用程序 我希望它使用网络套接字与后端通信 我已经编写了后端 并使用一个简单的 index html 页面进行了测试 服务器可以在套接字上发送和接收该页面 在我的 angular c
  • Nextjs 无法在生产环境中的“.next”目录中找到有效的构建

    我正在 docker 中运行我的应用程序 但我的生产构建和启动脚本仅在 docker 环境中失败 虽然node env开发在docker环境下运行良好 这是我的脚本 无法进行生产构建并启动服务器 我正在使用nodemon和babel bui
  • 当请求新页面时,如何将 AngularJS 路由与 Express (Node.js) 结合使用?

    我正在使用 Express 它从静态目录加载 AngularJS 一般情况下我会要求http localhost 其中 Express 为我服务index html以及所有正确的 Angular 文件等 在我的 Angular 应用程序中
  • Node.js 检测两个猫鼬查找何时完成

    我正在尝试使用自动完成功能初始化两个输入library https www devbridge com sourcery components jquery autocomplete 当我加载页面时 我将触发 Ajax 来初始化两个输入文本
  • 如何将对象数组定义为参数?

    我很新Swagger 所以这可能是一个基本问题 我可以为采用整数数组作为参数的 API 创建 yml 文件 如下所示 Add samples tags MY API parameters name my id in path type in
  • 获取对象数组中每个嵌套对象的虚拟属性?

    所以我知道如何获取单个虚拟属性 如 Mongoose 文档中所述 PersonSchema virtual name full get function return this name first this name last 但如果我的
  • 护照:登录和帐户注册的不同重定向

    我在我的应用程序中使用护照模块 github身份验证 我想根据操作进行重定向 我检查这是否只是正常登录或者用户是否第一次登录 passport use new GitHubStrategy clientID conf github app
  • 如何在Sequelize中设置查询超时?

    我想看看如何在 Sequelize 中设置查询的超时时间 我查看了 Sequelize 文档以获取一些信息 但我找不到我要找的东西 我发现的最接近的是 pools acquire 选项 但我不想设置传入连接的超时 而是设置正在进行的查询的超
  • 如何清除NPM的https代理设置?

    如何清除NPM之前的ssl代理设置 好吧 我搜索了很多 但我得到的所有帖子主要是关于如何set公司网络中的代理 我尝试将代理设置为空 npm config set http proxy npm config set https proxy
  • 如何处理 MongoDB 的断开连接错误

    我在 Node js 进程中看到了这个未捕获的异常 Uncaught exception Error read ETIMEDOUT at TCP onStreamRead internal stream base commons js 16
  • 如何在 next-auth 中将数据添加到客户端 API?

    我目前正在使用凭据提供程序使用 next auth 进行授权 我有会话正在运行并且用户可以登录等 但是 在会话中我需要使用客户端 API 用户 名字 姓氏传递一些数据 用户名和电子邮件 默认情况下 客户端 API 传递名称 电子邮件和图像
  • NodeJS Express Windows 最大连接数设置

    在哪里设置nodejs的最大连接数 用于使用express get 在 Windows 10 中 与linux中的最大文件 描述符 设置有关吗 有该设置的 Windows 版本吗 最好是在nodejs中进行设置 以便在迁移到unix时兼容
  • socket.io 的良好初学者教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 Mongoose 无法找到按 ObjectId 搜索的文档

    Campaign find client id req param client id error campaigns gt if error response error error message else for campaign i
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la

随机推荐