J'ai 2 documentations d'API swagger distinctes que je souhaite exécuter via le package NPM swagger-ui-express, et mon serveur express démarre correctement sur le port 5000, mais lorsque j'essaie d'accéder à l'une des URL, j'obtiens toujours le 404 erreur, voici mon fichier app.js et mes URL pour votre référence:
Route 1: http: // localhost: 5000 / edi Route 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}`));
4 Réponses :
Il semble que le Router
soit mal utilisé. Pour ce cas d'utilisation simple, je recommanderais d'ajouter vos itinéraires directement à l'instance app
. Voir:
// 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
Maintenant, vous pouvez utiliser le Router
en l'ajoutant à l'instance app
avec app.use ()
. Voir:
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}`));
J'espère que cela vous aidera !!
Merci pour votre suggestion et je l'ai déjà essayé. Dans ce cas, il affiche simplement la page vierge (lors du remplacement de l'itinéraire par l'application), obtenant l'erreur http 304. Les fichiers de configuration edi_openapi.json et ecom_openapi.json sont trop volumineux et ne peuvent pas être collés dans les commentaires en raison de la limitation de taille
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)) } });
Bien que cet extrait de code puisse être la solution, incluant un l'explication aide vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question aux lecteurs à l'avenir et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code.
cela ne fonctionne pas ... il redirige toujours vers l'url swagger par défaut
Essayez les configurations suivantes pour accrocher swaggerUi
avec express-app
app.use("/edi", swaggerUi.serve, (...args) => swaggerUi.setup(ediSwaggerDocument)(...args)); app.use("/ecom", swaggerUi.serve, (...args) => swaggerUi.setup(ecomSwaggerDocument)(...args));
Je n'ai pas assez creusé dans le Le dernier appel à Une solution rapide consiste à générer du HTML chaque fois que la route est appelée. Selon l'extrait de code que vous fournissez, cela devrait ressembler à: Notez que la variable globale est toujours mise à jour. swagger-ui-express
mais je pense que le problème vient de la fonction generateHTML
(appelée dans swaggerUi.setup ). Une variable de module globale (
swaggerInit
) est mise à jour lorsqu'elle est appelée. generateHTML
a des effets secondaires sur toutes les routes qui utilisent swaggerUi.setup middleware.
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);
});
pouvez-vous s'il vous plaît fournir vos fichiers de configuration
@luvcoding Avez-vous trouvé la solution pour cela?