1.0.41 • Published 8 months ago

express-swagger-typescript v1.0.41

Weekly downloads
-
License
Unlicense
Repository
github
Last release
8 months ago

Installing

For the latest stable version, run:

npm

# TypeScript later
npm install express-swagger-typescript swagger-ui-express

yarn

# TypeScript later
yarn add express-swagger-typescript swagger-ui-express

Usage

Set tsconfig.json:

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}

Example

// ..../error.response.ts
import { ApiModel, ApiModelProperty } from "express-swagger-typescript";

@ApiModel({
    description: 'Error Response`'
})
export class ErrorResponse {
    @ApiModelProperty({
        description: 'Error message',
        required: true,
        example: 'Sorry! Something went wrong.,
    })
    public message?: string;

    @ApiModelProperty({
        description: 'Error message',
        required: true,
        example: 'router_exception_something_went_wrong',
    })
    public type?:string;

    @ApiModelProperty({
        description: 'statusCode',
        required: true,
        example: 500
    })
    public statusCode?: number;

    @ApiModelProperty({
        description: 'Error code',
        required: true,
        example: 1001
    })
    public codeNumber?: number;
}
// ......./swagger.config.ts
import * as swagger from "express-swagger-typescript";
import { ErrorResponse } from ".....error.response";

const swaggerData: any = swagger.swaggerData({
  definition: {
    openapi: "3.0.0",
    info: {
      title: "My api",
      version: "1.0",
    },
    components: {
      securitySchemes: {
        bearerAuth: {
          type: "http",
          scheme: "bearer",
          bearerFormat: "JWT",
        },
      },
    },
    responses: {
      500: {
        content: {
          [swagger.SwaggerDefinitionConstant.Produce.JSON]: {
            schema: { model: ErrorResponse },
          },
        },
        description: "500 Internal Server Error Response",
      },
    },
    externalDocs: {
      url: "My url",
    },
  },
});

export default swaggerData;
// app.ts

import swaggerUi from "swagger-ui-express";
import swaggerSpec from "......./swagger.config";

const app = express();

app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(swaggerSpec));
  • Define Request and Response
//ThumbnailRequest

import { ApiModel, ApiModelProperty } from "express-swagger-typescript";

export enum EUrlType {
  IMAGE = "IMAGE",
  VIDEO = "VIDEO",
  AUDIO = "AUDIO",
}

@ApiModel({
  description: "Thumbnail request",
})
export class ThumbnailRequest {
  @ApiModelProperty({
    description: "url",
    required: true,
    example:
      "https://cdn.pixabay.com/photo/2020/05/11/22/31/cat-5160456_960_720.png",
  })
  url!: string;

  @ApiModelProperty({
    description: "Type",
    required: true,
    enum: Object.values(EUrlType),
    example: EUrlType.IMAGE,
  })
  type!: Array<EUrlType>;
}
// CreatePostRequest

import {
  ApiModel,
  ApiModelProperty,
  SwaggerDefinitionConstant,
} from "express-swagger-typescript";
import { ThumbnailRequest } from "./thumbnail.request";

@ApiModel({
  description: "Create post request",
})
export class CreatePostRequest {
  @ApiModelProperty({
    description: "Content",
    required: true,
    example: "Content Here",
  })
  content!: string;

  @ApiModelProperty({
    description: "Booking status",
    required: true,
    type: SwaggerDefinitionConstant.ARRAY,
    itemType: ThumbnailRequest,
  })
  thumbnails!: Array<ThumbnailRequest>;
}
// PostResponse.ts
import {
  ApiModel,
  ApiModelProperty,
  SwaggerDefinitionConstant,
} from "express-swagger-typescript";
import { ThumbnailResponse } from "./thumbnail.response";

@ApiModel({
  description: "Post response",
})
export class PostResponse {
  @ApiModelProperty({
    description: "Id's Post",
    required: true,
    example: "a1da9857-355e-43f1-8fdb-26a8a0ace6bd",
    type: SwaggerDefinitionConstant.STRING,
  })
  id!: string;

  @ApiModelProperty({
    description: "Created At",
    example: "2023-05-10T07:08:46.083Z",
  })
  createdAt!: Date;

  @ApiModelProperty({
    description: "Update At",
    example: "2023-05-10T07:08:46.083Z",
  })
  updatedAt!: Date;

  @ApiModelProperty({
    description: "Deleted At",
    example: null,
  })
  deletedAt!: Date;

  @ApiModelProperty({
    description: "Id's user",
    required: true,
    example: "a1da9857-355e-43f1-8fdb-26a8a0ace6bd",
    type: SwaggerDefinitionConstant.STRING,
  })
  userId!: string;

  @ApiModelProperty({
    description: "Content",
    required: true,
    example:
      "Perspiciatis ducimus corporis consectetur quia aspernatur nulla aliquid occaecati. Reprehenderit dolorum illum repellendus non necessitatibus modi. Fugiat iste quisquam molestias accusamus consequuntur quisquam eum doloribus.",
    type: SwaggerDefinitionConstant.STRING,
  })
  content!: string;

  @ApiModelProperty({
    description: "Thumbnails",
    required: true,
    type: SwaggerDefinitionConstant.ARRAY,
    itemType: ThumbnailResponse,
  })
  thumbnails!: Array<ThumbnailResponse>;
}
  • Define API method POST
    // Post API

    //...
    @ApiOperationPost({
        path: "",
        operationId: "createPost",
        security: {
            bearerAuth: [],
        },
        description: "Create new post",
        summary: "Create new post",
        requestBody: {
            content: {
                [SwaggerDefinitionConstant.Produce.JSON]: {
                    schema: { model: CreateNewPostRequest },
                },
            },
        },
        responses: {
            200: {
                content: {
                    [SwaggerDefinitionConstant.Produce.JSON]: {
                        schema: { model: PostResponse },
                    },
                },
                description: "Create post success",
            },
        },
    })
    async createPost(req: Request, res: Response) {
        const createNewPostRequest = req.body as CreateNewPostRequest;
        //...
    }
    //...
1.0.41

8 months ago

1.0.39

9 months ago

1.0.38

9 months ago

1.0.40

9 months ago

1.0.37

9 months ago

1.0.36

9 months ago

1.0.35

9 months ago

1.0.34

9 months ago

1.0.33

11 months ago

1.0.32

11 months ago

1.0.22

12 months ago

1.0.21

1 year ago

1.0.26

12 months ago

1.0.25

12 months ago

1.0.24

12 months ago

1.0.23

12 months ago

1.0.29

12 months ago

1.0.28

12 months ago

1.0.27

12 months ago

1.0.31

12 months ago

1.0.30

12 months ago

1.0.19

1 year ago

1.0.18

1 year ago

1.0.17

1 year ago

1.0.16

1 year ago

1.0.11

1 year ago

1.0.10

1 year ago

1.0.20

1 year ago

1.0.15

1 year ago

1.0.14

1 year ago

1.0.13

1 year ago

1.0.12

1 year ago

1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago