From 3ce9a0b21a050095d93643bab453375c4b889ca6 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Wed, 25 Nov 2020 19:28:52 +0100 Subject: [PATCH] Added basic openapi support ref #5 --- package.json | 7 +++++-- src/loaders/index.ts | 6 +++--- src/loaders/openapi.ts | 11 +++++++++++ src/loaders/routes.ts | 7 ------- 4 files changed, 19 insertions(+), 12 deletions(-) create mode 100644 src/loaders/openapi.ts delete mode 100644 src/loaders/routes.ts diff --git a/package.json b/package.json index 4798d26..04766fd 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,8 @@ "pg": "^8.5.1", "reflect-metadata": "^0.1.13", "routing-controllers": "^0.9.0-alpha.6", + "routing-controllers-openapi": "^2.1.0", + "swagger-ui-express": "^4.1.5", "typeorm": "^0.2.29" }, "devDependencies": { @@ -42,8 +44,9 @@ "@types/dotenv-safe": "^8.1.1", "@types/express": "^4.17.9", "@types/jsonwebtoken": "^8.5.0", - "@types/node": "^14.14.9", - "@types/multer": "^1.4.4", + "@types/node": "^14.14.9", + "@types/multer": "^1.4.4", + "@types/swagger-ui-express": "^4.1.2", "dotenv-safe": "^8.2.0", "husky": "^4.3.0", "nodemon": "^2.0.6", diff --git a/src/loaders/index.ts b/src/loaders/index.ts index 52736df..704ea47 100644 --- a/src/loaders/index.ts +++ b/src/loaders/index.ts @@ -1,11 +1,11 @@ import expressLoader from "./express"; -import routeLoader from "./routes"; +import openapiLoader from "./openapi"; import databaseLoader from "./database"; -import {Application} from "express"; +import { Application } from "express"; export default async (app: Application) => { await databaseLoader(); + await openapiLoader(app); await expressLoader(app); - await routeLoader(app); return app; }; diff --git a/src/loaders/openapi.ts b/src/loaders/openapi.ts new file mode 100644 index 0000000..1de2818 --- /dev/null +++ b/src/loaders/openapi.ts @@ -0,0 +1,11 @@ +import { Application } from "express"; +import * as swaggerUiExpress from "swagger-ui-express"; +import { getMetadataArgsStorage } from "routing-controllers"; +import { routingControllersToSpec } from "routing-controllers-openapi"; + +export default async (app: Application) => { + const storage = getMetadataArgsStorage(); + const spec = routingControllersToSpec(storage); + app.use("/docs", swaggerUiExpress.serve, swaggerUiExpress.setup(spec)); + return app; +}; diff --git a/src/loaders/routes.ts b/src/loaders/routes.ts deleted file mode 100644 index 1d9309c..0000000 --- a/src/loaders/routes.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {Application} from "express"; -import routerMain from "../routes/index"; - -export default async (app: Application) => { - app.use('/api/', routerMain); - return app; -};