nope/src/startBackend.ts

75 lines
2.2 KiB
TypeScript
Raw Normal View History

2020-08-19 06:36:59 +00:00
import * as bodyParser from "body-parser";
import * as cors from 'cors';
import * as express from "express";
2020-08-19 06:36:59 +00:00
import { initialize } from "express-openapi";
import { assignIn } from 'lodash';
import { Logger } from 'winston';
2020-08-25 22:11:26 +00:00
import { SocketBackend } from "../lib/communication/socketBackend";
2020-08-30 08:19:17 +00:00
import { getLinkedDispatcher } from "../lib/dispatcher/getLinkedDispatcher";
import { apiDoc } from '../specs/apiDoc';
import { getBackendAccesors } from './getBackendAccessors';
2020-08-19 06:36:59 +00:00
2020-08-25 22:11:26 +00:00
/**
* Function to start a Open-API-Server
* @param options Options for the Server
*/
2020-08-19 06:36:59 +00:00
export function startBackend(options: {
port?: number,
2020-08-25 22:11:26 +00:00
backendPort?: number,
2020-08-19 06:36:59 +00:00
basePath?: string,
logger?: Logger,
} = {}) {
2020-08-19 06:36:59 +00:00
const app: express.Application = (express as any)();
// Define the Default Options
const defaults = {
port: 3001,
2020-08-25 22:11:26 +00:00
backendPort: 3002,
2020-08-19 06:36:59 +00:00
basePath: '/api'
}
// Mix the Options.
const opts = assignIn(defaults, options);
app.use(bodyParser.json());
app.use(cors());
2020-08-19 06:36:59 +00:00
initialize({
apiDoc: apiDoc('Backend API', '1.0.0', opts.basePath),
2020-08-19 06:36:59 +00:00
app,
2020-08-25 08:32:46 +00:00
paths: './dist/open-api',
2020-08-19 06:36:59 +00:00
routesGlob: '**/*.{ts,js}',
routesIndexFileRegExp: /(?:index)?\.[tj]s$/,
dependencies: {
2020-08-30 08:19:17 +00:00
_dispatcher: getLinkedDispatcher(
2020-08-25 22:11:26 +00:00
new SocketBackend(opts.backendPort)
)
},
2020-08-19 06:36:59 +00:00
});
2020-08-19 06:36:59 +00:00
app.use(((err, req, res, next) => {
res.status(err.status).json(err);
}) as express.ErrorRequestHandler);
2020-08-19 06:36:59 +00:00
const server = app.listen(opts.port);
const accessor = getBackendAccesors(app);
if (options.logger) {
options.logger.info('Server Running on http://localhost:' + opts.port.toString() + opts.basePath);
options.logger.info('API Documentation available on http://localhost:' + opts.port.toString() + opts.basePath + '/api-docs');
options.logger.debug('Checkout http://localhost:3000/docs')
}
return {
2020-08-19 06:36:59 +00:00
app,
// Accessor for the Server
accessor,
// Function to extract the Definitions.
definitionUri: opts.basePath + '/api-docs',
// Function to Close the Server
close() {
server.close();
}
}
}