Node.js swagger ui为不同的API文档表达多条路径

Node.js swagger ui为不同的API文档表达多条路径,node.js,express,routes,swagger-ui,Node.js,Express,Routes,Swagger Ui,我有两个单独的swagger API文档,我想通过swagger ui express NPM软件包运行,我的express服务器在端口5000上启动良好,但当我尝试访问任何URL时,总是出现404错误,以下是我的app.js文件和URL供您参考: 一号干线: 二号干线: 看起来路由器使用不正确。对于这个简单的用例,我建议将您的路线直接添加到应用程序实例中。见: const express = require('express'); // xxxx const router = r

我有两个单独的swagger API文档,我想通过swagger ui express NPM软件包运行,我的express服务器在端口5000上启动良好,但当我尝试访问任何URL时,总是出现404错误,以下是我的app.js文件和URL供您参考:

一号干线: 二号干线:


看起来
路由器
使用不正确。对于这个简单的用例,我建议将您的路线直接添加到
应用程序
实例中。见:

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}`));
现在,您可以通过使用
app.use()
将路由器添加到
app
实例来使用
Router
。见:

// 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

希望这有帮助

router.use('/jobs/api/:id',swaggerUi.serve,(req,res)=>{
console.log("here")
let a = req.params.id
if(a==='all'){ res.status(200).send(swaggerUi.generateHTML(swaggerDocument))}
if(a==='google'){res.status(200).send(swaggerUi.generateHTML(GoogleAds)) }

}))

尝试以下配置以使用
express app


app.use(“/edi”,swaggerUi.service,(…args)=>swaggerUi.setup(ediSwaggerDocument)(…args));
app.use(“/ecom”,swaggerUi.service,(…args)=>swaggerUi.setup(ecomSwaggerDocument)(…args));

我对Swigger ui express的研究还不够深入,但我认为问题来自函数
generateHTML
(在
SwiggerUI.setup
中调用)。全局模块变量(
swaggerInit
)在调用时更新

因此,最后一次调用
generateHTML
对使用
swaggerUi.setup
中间件的每个路由都有副作用

一个快速修复方法是在每次调用路由时生成HTML。根据您提供的代码片段,它应该如下所示:

 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);
  });

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

你能提供你的配置吗files@luvcoding你找到解决方法了吗?谢谢你的建议,我已经试过了。在这种情况下,它只是显示空白页(当用APP替换路由)时,获得HTTP 304错误。配置文件edi_openapi.json和ecom_openapi.json太大,由于大小限制,无法粘贴到注释中。虽然此代码片段可能是解决方案,但确实有助于提高文章质量。请记住,您将在将来回答读者的问题,而这些人可能不知道您的代码建议的原因。它不起作用。。。它仍然会重定向到默认的招摇过市url
 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);
  });