swagger-ui-express多个路由用于不同的API文档 [英] swagger-ui-express Multiple Routes for Different API Documentation
问题描述
我有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屋!