swagger-ui-express用于不同API文档的多个路由

问题描述 投票:0回答:1

我有2个单独的swagger API文档,我想通过swagger-ui-express NPM包运行,而我的快速服务器在端口5000上正常启动,但是当我试图访问任何URL时总是得到404错误,这里是我的app.js文件和URL供您参考:

路线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}`));
node.js express routes swagger-ui
1个回答
0
投票

看起来Router使用不当。对于这个简单的用例,我建议您将路由直接添加到app实例。看到:

const express    = require('express');
// xxxx 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
app.use('/', swaggerUi.serve); // replaced router with app

// Route - EDI RESTful API Documentaion 
// REPLACED "router" with "app"
app.get('/edi', swaggerUi.setup(ediSwaggerDocument)); 
// Route - eCommerce RESTful API Documentaion 
// REPLACED "router" with "app"
app.get('/ecom', swaggerUi.setup(ecomSwaggerDocument));

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

现在,您可以使用Routerapp添加到app.use()实例中。看到:

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

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

// Adding it to App instance
app.use('/swagger', router)

// End Point =>     localhost:5000/swagger/edi

希望这可以帮助!!

© www.soinside.com 2019 - 2024. All rights reserved.