forked from engineering/cloudservices
Add express server class
parent
ea1f20afc6
commit
ed9d095e78
|
@ -0,0 +1,46 @@
|
|||
/* eslint-disable no-useless-return */
|
||||
import express from 'express';
|
||||
import bodyParser from 'body-parser';
|
||||
import fs from 'fs-extra';
|
||||
import { Client } from '..';
|
||||
import { Security } from '.';
|
||||
import { Route } from '../class';
|
||||
|
||||
export default class Server {
|
||||
public routes: Map<string, Route>;
|
||||
|
||||
public client: Client;
|
||||
|
||||
public security: Security;
|
||||
|
||||
public app: express.Express;
|
||||
|
||||
public options: { port: number }
|
||||
|
||||
constructor(client: Client, options?: { port: number }) {
|
||||
this.options = options;
|
||||
this.routes = new Map();
|
||||
this.client = client;
|
||||
this.security = new Security(this.client);
|
||||
this.app = express();
|
||||
this.connect();
|
||||
this.loadRoutes();
|
||||
}
|
||||
|
||||
private async loadRoutes(): Promise<void> {
|
||||
const routes = await fs.readdir('./routes');
|
||||
routes.forEach(async (routeFile) => {
|
||||
if (routeFile === 'index.js') return;
|
||||
const route: Route = new (require(`./${routeFile}`))(this);
|
||||
this.routes.set(route.conf.path, route);
|
||||
this.app.use(route.conf.path, route.router);
|
||||
});
|
||||
}
|
||||
|
||||
private connect(): void {
|
||||
this.app.use(bodyParser.json());
|
||||
this.app.listen(this.options.port, () => {
|
||||
this.client.signale.success(`API Server listening on port ${this.options.port}`);
|
||||
});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
export { default as Server } from './Server';
|
||||
export { default as Security } from './Security';
|
Loading…
Reference in New Issue