Estoy usando swagger-ui-express con swagger-jsdoc en mi proyecto Express.js. He implementado todo de acuerdo con algunos tutoriales y documentos oficiales. Aún así, cuando ingreso la URL de Swagger, ¡obtengo una pantalla blanca en blanco!
Mi archivo server.js :
const express = require('express'); const cookieParser = require('cookie-parser') const cors = require('cors'); const methodOverride = require('method-override'); const bodyParser = require('body-parser'); const connectMongoDB = require('./config/mongo-db'); const swaggerUi = require('swagger-ui-express'); const swaggerJSDoc = require('swagger-jsdoc'); const Middleware = require('./utils/middlewares'); const menuRoutes = require('./routes/api/menus'); const userRoutes = require('./routes/api/user'); require('dotenv').config(); const app = express() app.use(cors()); app.use(function(req, res, next) { //allow cross origin requests res.setHeader("Access-Control-Allow-Methods", "POST, PUT, OPTIONS, DELETE, GET"); res.header("Access-Control-Allow-Origin", "http://127.0.0.1:3000"); // frontend res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header("Access-Control-Allow-Credentials", true); next(); }); app.use(bodyParser.json()); app.use(cookieParser()); app.use(methodOverride('_method')); app.use(express.json({ extended: false })); const port = process.env.PORT || 3001; // back-end PORT is 3001 connectMongoDB(); app.use(Middleware.authJWTMiddleware); app.use(Middleware.logVisit); app.use(cors({ origin: true, credentials: true })); app.get('/', (req, res) => res.send('Hello world!')); app.use('/api/menus', menuRoutes); app.use('/api/users', userRoutes, function (req, res) { res.sendStatus(401) }); // Swagger configurations const swaggerOptions = { swaggerDefinition: { openapi: '3.1.0', info: { title: 'Restaurant Site', version: '1.0.0', description: "This is a simple CRUD API application made with Express and documented with Swagger", license: 'none', contact: { name: "John Doe", email: "john@mail.com" }, servers: [ { url: 'http://127.0.0.1:3001', }, ], }, }, apis: ["/routes/api/menus.js",], }; const specs = swaggerJSDoc(swaggerOptions); app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs, {explorer: true})); app.listen(port, () => console.log(`Server is listening on port ${port}`));Todavía no he implementado ningún modelo de swagger, pero aún así se supone que debo obtener una página web navegable de swagger. ¿Por qué no lo estoy consiguiendo?
solo necesita agregarles cosas de swagger antes del middleware de autenticación
const express = require("express"); ... const app = express(); ... app.use(SwaggerStuff); app.use(whatEvaChecksAuthStuff);El middleware de autenticación bloqueaba las URL que contenían la ruta /api-docs/swagger... . Entonces, tuve que poner estas rutas en la lista de exclusión y ahora está funcionando.