Bird
Raised Fist0
Expressframework~5 mins

swagger-jsdoc setup in Express

Choose your learning style10 modes available
Introduction

swagger-jsdoc helps you create clear API documentation automatically from your code comments. It makes your API easy to understand for others.

You want to document your Express API endpoints clearly.
You need a simple way to keep API docs updated with your code.
You want to generate Swagger UI docs for your API.
You want to share API details with frontend or other teams.
You want to test your API interactively using Swagger UI.
Syntax
Express
const swaggerJSDoc = require('swagger-jsdoc');

const options = {
  definition: {
    openapi: '3.0.0',
    info: {
      title: 'API Title',
      version: '1.0.0',
      description: 'API description here',
    },
  },
  apis: ['./routes/*.js'],
};

const swaggerSpec = swaggerJSDoc(options);

definition holds the main API info and OpenAPI version.

apis is an array of file paths where swagger-jsdoc looks for comments.

Examples
Basic setup pointing to a single file app.js for API comments.
Express
const swaggerJSDoc = require('swagger-jsdoc');

const options = {
  definition: {
    openapi: '3.0.0',
    info: {
      title: 'My API',
      version: '1.0.0'
    },
  },
  apis: ['./app.js'],
};

const swaggerSpec = swaggerJSDoc(options);
Setup with multiple files listed for API documentation comments.
Express
const swaggerJSDoc = require('swagger-jsdoc');

const options = {
  definition: {
    openapi: '3.0.0',
    info: {
      title: 'User API',
      version: '2.0.0',
      description: 'User management endpoints',
    },
  },
  apis: ['./routes/users.js', './routes/auth.js'],
};

const swaggerSpec = swaggerJSDoc(options);
Sample Program

This example sets up an Express server with swagger-jsdoc and swagger-ui-express. It documents a simple /hello GET endpoint that returns a greeting. The Swagger UI is available at /api-docs.

Express
const express = require('express');
const swaggerJSDoc = require('swagger-jsdoc');
const swaggerUi = require('swagger-ui-express');

const app = express();

const options = {
  definition: {
    openapi: '3.0.0',
    info: {
      title: 'Simple API',
      version: '1.0.0',
      description: 'A simple Express API documented with swagger-jsdoc',
    },
  },
  apis: ['./index.js'],
};

const swaggerSpec = swaggerJSDoc(options);

/**
 * @openapi
 * /hello:
 *   get:
 *     summary: Returns a greeting message
 *     responses:
 *       200:
 *         description: Greeting message
 *         content:
 *           text/plain:
 *             schema:
 *               type: string
 *               example: Hello, world!
 */
app.get('/hello', (req, res) => {
  res.send('Hello, world!');
});

app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));

app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
  console.log('Swagger docs at http://localhost:3000/api-docs');
});
OutputSuccess
Important Notes

Make sure your API comment blocks use the correct @openapi or Swagger syntax for swagger-jsdoc to parse them.

Use swagger-ui-express to serve the generated docs in a friendly web page.

Keep the apis paths updated to include all files with API comments.

Summary

swagger-jsdoc generates API docs from comments in your code.

It needs a config object with API info and file paths.

Use swagger-ui-express to show docs in the browser.

Practice

(1/5)
1. What is the main purpose of swagger-jsdoc in an Express app?
easy
A. To connect to a database
B. To handle HTTP requests and responses
C. To generate API documentation from comments in your code
D. To serve static files like images and CSS

Solution

  1. Step 1: Understand swagger-jsdoc role

    swagger-jsdoc reads specially formatted comments in your Express code to create API documentation automatically.
  2. Step 2: Compare with other options

    Handling HTTP requests is Express's job, not swagger-jsdoc. Database connection and serving static files are unrelated tasks.
  3. Final Answer:

    To generate API documentation from comments in your code -> Option C
  4. Quick Check:

    swagger-jsdoc = API docs generator [OK]
Hint: swagger-jsdoc creates docs from code comments [OK]
Common Mistakes:
  • Confusing swagger-jsdoc with Express routing
  • Thinking swagger-jsdoc manages databases
  • Assuming swagger-jsdoc serves static files
2. Which of the following is the correct way to import and initialize swagger-jsdoc in an ES modules-based Express app?
easy
A. import swaggerJSDoc from 'swagger-jsdoc'; const specs = swaggerJSDoc(options);
B. const swaggerJSDoc = require('swagger-jsdoc'); const specs = swaggerJSDoc();
C. const swaggerJSDoc = require('swagger-jsdoc'); const specs = swaggerJSDoc(options);
D. import swaggerJSDoc from 'swagger-jsdoc'; const specs = swaggerJSDoc();

Solution

  1. Step 1: Use modern ES module import

    In modern Express apps using ES modules, import swaggerJSDoc from 'swagger-jsdoc' is correct.
  2. Step 2: Initialize swagger-jsdoc with options

    swaggerJSDoc requires an options object to generate specs, so calling it without arguments is incorrect.
  3. Final Answer:

    import swaggerJSDoc from 'swagger-jsdoc'; const specs = swaggerJSDoc(options); -> Option A
  4. Quick Check:

    Import + call with options = C [OK]
Hint: Use import and pass options to swaggerJSDoc() [OK]
Common Mistakes:
  • Calling swaggerJSDoc() without options
  • Using require instead of import in ES modules
  • Not assigning the result to a variable
3. Given this swagger-jsdoc options object, what will specs contain after calling swaggerJSDoc(options)?
const options = {
  definition: {
    openapi: '3.0.0',
    info: { title: 'Test API', version: '1.0.0' }
  },
  apis: ['./routes/*.js']
};
const specs = swaggerJSDoc(options);
medium
A. A string containing raw JavaScript code from './routes/*.js'
B. An object with OpenAPI info and paths extracted from comments in './routes/*.js'
C. An error because 'apis' path is incorrect
D. An empty object because no API comments exist

Solution

  1. Step 1: Understand swagger-jsdoc output

    swagger-jsdoc returns a JSON object with OpenAPI info and paths parsed from specified files.
  2. Step 2: Check options correctness

    The options specify OpenAPI version and info, and a valid path pattern for API files, so it will parse comments there.
  3. Final Answer:

    An object with OpenAPI info and paths extracted from comments in './routes/*.js' -> Option B
  4. Quick Check:

    swaggerJSDoc(options) = OpenAPI JSON object [OK]
Hint: swaggerJSDoc returns parsed OpenAPI JSON from code comments [OK]
Common Mistakes:
  • Expecting raw code instead of parsed JSON
  • Assuming error without checking file existence
  • Thinking output is empty without comments
4. Identify the error in this swagger-jsdoc setup snippet:
import swaggerJSDoc from 'swagger-jsdoc';
import swaggerUi from 'swagger-ui-express';
const options = {
  definition: {
    openapi: '3.0.0',
    info: { title: 'API', version: '1.0' }
  },
  apis: ['./api/*.js']
};
const specs = swaggerJSDoc();

app.use('/docs', swaggerUi.serve, swaggerUi.setup(specs));
medium
A. swaggerJSDoc is called without passing the options object
B. The 'apis' path should be './api/*.ts' instead of '.js'
C. swaggerUi.setup() should be called before swaggerUi.serve
D. Missing import for swaggerUi from 'swagger-ui-express'

Solution

  1. Step 1: Check swaggerJSDoc call

    The code calls swaggerJSDoc() without arguments, but it requires the options object to generate specs.
  2. Step 2: Verify other parts

    The 'apis' path is valid for JavaScript files. swaggerUi.setup() after serve is correct usage.
  3. Final Answer:

    swaggerJSDoc is called without passing the options object -> Option A
  4. Quick Check:

    Call swaggerJSDoc(options) not empty () [OK]
Hint: Always pass options to swaggerJSDoc() [OK]
Common Mistakes:
  • Calling swaggerJSDoc() without options
  • Confusing order of swaggerUi middleware
  • Ignoring missing imports
5. You want to set up swagger-jsdoc in your Express app to document APIs ONLY in routes/users.js and routes/products.js (assuming there are other .js files in the routes directory that should not be documented). Which apis option correctly includes both files for swagger-jsdoc?
hard
A. ['./routes/users.js', './routes/products']
B. ['./routes/*.js']
C. ['./routes/users.js|./routes/products.js']
D. ['./routes/users.js', './routes/products.js']

Solution

  1. Step 1: Understand 'apis' option format

    The 'apis' option is an array of file paths or glob patterns to scan for comments.
  2. Step 2: Check each option

    ['./routes/users.js', './routes/products.js'] lists both files explicitly, which is correct. ['./routes/*.js'] uses a glob that includes both files but may include others. ['./routes/users.js|./routes/products.js'] uses an invalid string with '|'. ['./routes/users.js', './routes/products'] has a missing file extension for products.js.
  3. Final Answer:

    ['./routes/users.js', './routes/products.js'] -> Option D
  4. Quick Check:

    List each file path separately in array [OK]
Hint: List each file path separately in 'apis' array [OK]
Common Mistakes:
  • Using invalid string with '|' instead of array items
  • Omitting file extensions
  • Using too broad glob patterns unintentionally
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard