how to use local swagger.json, istead of giving api controllers

1k Views Asked by At

I am new to swagger. I am creating an express-nodejs-typescript, rest api project. I have configured swagger and it is working fine, please see my code below.

import swaggerUi from "swagger-ui-express";
import swaggerJsdoc from 'swagger-jsdoc'    

const app = express()

const swaggerOptions: swaggerJsdoc.Options = {
  definition: {
    openapi: "3.0.0",
    info: {
      title: "REST API Docs",
      version: '1.0',
    },
    components: {
      securitySchemas: {
        bearerAuth: {
          type: "http",
          scheme: "bearer",
          bearerFormat: "JWT",
        },
      },
    },
    security: [
      {
        bearerAuth: [],
      },
    ],
  },
  apis: ['src/apis/**/*.controller.ts', 'src/schemas/*.schema.ts'],
};
const swaggerDocs = swaggerJsdoc(swaggerOptions);
app.use(
  "/docs",
  swaggerUi.serve,
  swaggerUi.setup(swaggerDocs, { explorer: true })
);

What i want is to use local swagger.json file, instead on giving apis array apis: ['src/apis/**/*.controller.ts', 'src/schemas/*.schema.ts'],

How can I do that, please help.

1

There are 1 best solutions below

0
On

something like this should work:

const app = express();
const swaggerUi = require('swagger-ui-express');
try {
  const swaggerDoc = require('./your/doc/swagger.json');
  app.use('/doc', swaggerUi.serve, swaggerUi.setup(swaggerDoc));
} catch (error) {
  console.error('Error loading Swagger json: ', error);
}
app.listen(3000, '0.0.0.0', () => {
  console.log(` Server started: http://localhost:3000/doc`);
});