swagger-ui-express多个路由用于不同的API文档 [英] swagger-ui-express Multiple Routes for Different API Documentation

查看:627
本文介绍了swagger-ui-express多个路由用于不同的API文档的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个单独的swagger API文档,我希望通过swagger-ui-express NPM包运行,并且我的express服务器在端口5000上运行良好,但是当我尝试访问任何URL时总是得到404错误,这是我的app.js文件和URL,供您参考:

I have 2 separate swagger API documentations which I want to run via swagger-ui-express NPM package, and my express server is starting fine on port 5000, but when I am trying to access any of the URL always getting the 404 error, Here is my app.js file and URL's for your reference:

路由1: http:// localhost:5000 / edi
路由2: http:/ / localhost:5000 / ecom

const express    = require('express');
const router     = require('express').Router();
const swaggerUi  = require('swagger-ui-express');

const ediSwaggerDocument  = require('./edi-openapi.json');
const ecomSwaggerDocument = require('./ecom-openapi.json');

const SWAGGER_APP_PORT = process.env.SWAGGER_APP_PORT || 5000;

const app = express();

// Route Middleware to be called before serving Any Route
router.use('/', swaggerUi.serve); 

// Route - EDI RESTful API Documentaion 
router.get('/edi', swaggerUi.setup(ediSwaggerDocument)); 

// Route - eCommerce RESTful API Documentaion 
router.get('/ecom', swaggerUi.setup(ecomSwaggerDocument));

app.listen(SWAGGER_APP_PORT, () => console.log(`RESTful API Up and Running on Port ${SWAGGER_APP_PORT}`));


推荐答案

我还没有深入研究 swagger-ui-express ,但我认为问题出在函数 generateHTML (在 swaggerUi.setup中调用) )。全局模块变量( swaggerInit )在调用时会更新。

I haven't dig enough into the swagger-ui-express but i think the problem comes from the function generateHTML (called in swaggerUi.setup). A global module variable (swaggerInit) is updated when called.

所以最后一次调用 generateHTML 在使用 swaggerUi.setup 中间件的每条路由上都有副作用。

So the last call to generateHTML has side effects on every routes that use swaggerUi.setup middleware.

一个快速的解决方法是在每次调用路由时生成HTML。根据您提供的代码片段,它应该类似于:

A quick fix is to generate HTML each time the route is called. According to the code snippet you provide, it should looks like :

 let swaggerDocEdi = require('./edi-openapi.json');
 let swaggerDocEcom= require('./ecom-openapi.json');
 let router = express.Router();

 router.use('/api/edi', swagger.serve, (req, res) => {
     let html = swagger.generateHTML(swaggerDocEdi);
     res.send(html);
 });

 router.use('/api/ecom', swagger.serve, (req, res) => {
     let html = swagger.generateHTML(swaggerDocEcom);
     res.send(html);
  });

请注意,全局变量仍在更新。

这篇关于swagger-ui-express多个路由用于不同的API文档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆