diff --git a/server/index.ts b/server/index.ts index bdd8985..986c70a 100644 --- a/server/index.ts +++ b/server/index.ts @@ -1,18 +1,15 @@ -import express, { Request, Response } from 'express'; +import express from 'express'; import cors from 'cors'; +import { loaders } from './loaders'; const port = 8080; const app = express(); app.use(cors()); -app.get('/', (req: Request, res: Response) => { - res.send('express'); -}) - -app.get('/hello', (req, res) => { - res.send({ message: "hello from the server!!" }); -}) - -app.listen(port, () => { - console.log('listening on ' + port); -}) \ No newline at end of file +(async function() { + const app = express(); + await loaders(app); + app.listen(port, () => { + console.log('listening on ' + port); + }) +})(); diff --git a/server/loaders/express.ts b/server/loaders/express.ts index e69de29..aec2b3e 100644 --- a/server/loaders/express.ts +++ b/server/loaders/express.ts @@ -0,0 +1,13 @@ +import { Express } from 'express'; +import cors from 'cors'; +import bodyParser from 'body-parser'; + +export const expressLoader = (app: Express) => { + app.use(cors()); + app.use(bodyParser.json()); + app.use(bodyParser.urlencoded({ extended: true })); + + // app.use(session({})) + + return app; +} \ No newline at end of file diff --git a/server/loaders/index.ts b/server/loaders/index.ts new file mode 100644 index 0000000..bf91ac7 --- /dev/null +++ b/server/loaders/index.ts @@ -0,0 +1,12 @@ +import { Express } from 'express'; +import { expressLoader } from './express'; +import { swaggerLoader } from './swagger'; +import { routes } from '../routes'; + +export const loaders = async (app: Express) => { + const expressApp = await expressLoader(app); + // const passportApp = await passportLoader(expressApp); + + await swaggerLoader(expressApp); + await routes(expressApp); +} \ No newline at end of file diff --git a/server/loaders/swagger.ts b/server/loaders/swagger.ts index e69de29..a2e4d71 100644 --- a/server/loaders/swagger.ts +++ b/server/loaders/swagger.ts @@ -0,0 +1,11 @@ +import { Express } from 'express'; +import swaggerUI from 'swagger-ui-express'; +import yaml from 'js-yaml'; +import fs from 'fs'; +import path from 'path'; + +const swaggerDocument = yaml.load(fs.readFileSync(path.resolve(__dirname, '../../swagger.yaml'), 'utf-8')); + +export const swaggerLoader = (app: Express) => { + app.use('/api-docs', swaggerUI.serve, swaggerUI.setup(swaggerDocument)); +} \ No newline at end of file diff --git a/server/package-lock.json b/server/package-lock.json index 285c411..e8d1374 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -11,12 +11,15 @@ "dependencies": { "cors": "^2.8.5", "express": "^4.18.2", + "js-yaml": "^4.1.0", "swagger-ui-express": "^4.6.0" }, "devDependencies": { "@types/cors": "^2.8.12", "@types/express": "^4.17.14", + "@types/js-yaml": "^4.0.5", "@types/node": "^18.11.9", + "@types/swagger-ui-express": "^4.1.3", "nodemon": "^2.0.20", "tslint": "^6.1.3", "typescript": "^4.9.3" @@ -105,6 +108,12 @@ "@types/range-parser": "*" } }, + "node_modules/@types/js-yaml": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", + "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", + "dev": true + }, "node_modules/@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -139,6 +148,16 @@ "@types/node": "*" } }, + "node_modules/@types/swagger-ui-express": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@types/swagger-ui-express/-/swagger-ui-express-4.1.3.tgz", + "integrity": "sha512-jqCjGU/tGEaqIplPy3WyQg+Nrp6y80DCFnDEAvVKWkJyv0VivSSDCChkppHRHAablvInZe6pijDFMnavtN0vqA==", + "dev": true, + "dependencies": { + "@types/express": "*", + "@types/serve-static": "*" + } + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -183,13 +202,9 @@ } }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-flatten": { "version": "1.1.1", @@ -782,13 +797,11 @@ "dev": true }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -1357,6 +1370,28 @@ "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" } }, + "node_modules/tslint/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/tslint/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/tsutils": { "version": "2.29.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", @@ -1506,6 +1541,12 @@ "@types/range-parser": "*" } }, + "@types/js-yaml": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", + "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", + "dev": true + }, "@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -1540,6 +1581,16 @@ "@types/node": "*" } }, + "@types/swagger-ui-express": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@types/swagger-ui-express/-/swagger-ui-express-4.1.3.tgz", + "integrity": "sha512-jqCjGU/tGEaqIplPy3WyQg+Nrp6y80DCFnDEAvVKWkJyv0VivSSDCChkppHRHAablvInZe6pijDFMnavtN0vqA==", + "dev": true, + "requires": { + "@types/express": "*", + "@types/serve-static": "*" + } + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -1575,13 +1626,9 @@ } }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "array-flatten": { "version": "1.1.1", @@ -2033,13 +2080,11 @@ "dev": true }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "media-typer": { @@ -2446,6 +2491,27 @@ "semver": "^5.3.0", "tslib": "^1.13.0", "tsutils": "^2.29.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } } }, "tsutils": { diff --git a/server/package.json b/server/package.json index bf3bd41..839ad9d 100644 --- a/server/package.json +++ b/server/package.json @@ -12,12 +12,15 @@ "dependencies": { "cors": "^2.8.5", "express": "^4.18.2", + "js-yaml": "^4.1.0", "swagger-ui-express": "^4.6.0" }, "devDependencies": { "@types/cors": "^2.8.12", "@types/express": "^4.17.14", + "@types/js-yaml": "^4.0.5", "@types/node": "^18.11.9", + "@types/swagger-ui-express": "^4.1.3", "nodemon": "^2.0.20", "tslint": "^6.1.3", "typescript": "^4.9.3" diff --git a/server/routes/index.ts b/server/routes/index.ts index e69de29..257e3be 100644 --- a/server/routes/index.ts +++ b/server/routes/index.ts @@ -0,0 +1,7 @@ +import { Express } from "express" + +export const routes = (app: Express, passport?: any) => { + app.get('/hello', (req, res) => { + res.send({ message: "hello from the server!!" }); + }) +} \ No newline at end of file