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