Optimize middleware in express when using swagger-ui-express
Hi campers,
I am using swagger-ui-express to generate an API documentation. Below is how I have implemented the /documentation
endpoint. I am dynamically mutating the JSON swaggerDocument
as described in the doc under “Modify swagger file on the fly before load” section.
const swaggerDocument = require("./swagger.json");
const swaggerOptions = { explorer: true, customSiteTitle: "Quiz API" };
app.use("/documentation", async (req, res, next) => {
// Fetch data from the database and mutate swaggerDocument here
console.log("Middleware has been called");
req.swaggerDoc = swaggerDocument;
next();
}, swaggerUi.serve, swaggerUi.setup(undefined, swaggerOptions));
Every time I hit the /documentation
endpoint, the middleware
above is invoked 6 times. I am not sure if there is something I am doing wrong or that is how it is supposed to be. I just want it to be invoked once since I am reading from the DB. I know I can also read from the database once by doing something like:
let updatedSwaggerDoc = false;
app.use("/documentation", async (req, res, next) => {
if(!updatedSwaggerDoc){
// Fetch from database and update swaggerDoc
req.swaggerDoc = swaggerDocument;
updatedSwaggerDoc = true;
}
next();
}, swaggerUi.serve, swaggerUi.setup(undefined, swaggerOptions));
I am wondering why the middleware is invoked 6 times. I have failed to find an answer in the documentation.