1.0.41 • Published 2 years ago
express-swagger-typescript v1.0.41
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
2 years ago
1.0.39
2 years ago
1.0.38
2 years ago
1.0.40
2 years ago
1.0.37
2 years ago
1.0.36
2 years ago
1.0.35
2 years ago
1.0.34
2 years ago
1.0.33
2 years ago
1.0.32
2 years ago
1.0.22
2 years ago
1.0.21
2 years ago
1.0.26
2 years ago
1.0.25
2 years ago
1.0.24
2 years ago
1.0.23
2 years ago
1.0.29
2 years ago
1.0.28
2 years ago
1.0.27
2 years ago
1.0.31
2 years ago
1.0.30
2 years ago
1.0.19
2 years ago
1.0.18
2 years ago
1.0.17
2 years ago
1.0.16
2 years ago
1.0.11
2 years ago
1.0.10
2 years ago
1.0.20
2 years ago
1.0.15
2 years ago
1.0.14
2 years ago
1.0.13
2 years ago
1.0.12
2 years ago
1.0.9
2 years ago
1.0.8
2 years ago
1.0.7
2 years ago
1.0.6
2 years ago
1.0.5
2 years ago
1.0.4
2 years ago
1.0.3
2 years ago
1.0.2
2 years ago
1.0.1
2 years ago
1.0.0
2 years ago