aboutsummaryrefslogtreecommitdiff
path: root/src/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/index.ts')
-rw-r--r--src/index.ts82
1 files changed, 31 insertions, 51 deletions
diff --git a/src/index.ts b/src/index.ts
index 76620e8..e4f8db1 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,9 +1,5 @@
import dotenv from "dotenv";
import express from "express";
-import { MongoClient } from "mongodb";
-import path from "path";
-import fs from "fs";
-
import winston from "winston";
import expressWinston from "express-winston";
@@ -12,57 +8,41 @@ dotenv.config();
import routes from "./routes";
import Metadata from "./metadata";
import loggerConfig from "./util/logger";
-import { configOrError, handleShutdown } from "./util/config";
+import { handleStartup, handleShutdown } from "./util/config";
// Start-up configuration
const BIND_ADDRESS = process.env.BIND_ADDRESS ?? "localhost";
+const MONGO_DB = process.env.MONGO_DB ?? "ao-coverage";
const PORT = Number(process.env.PORT ?? 3000);
const logger = winston.createLogger(loggerConfig("ROOT"));
-const MONGO_URI = configOrError("MONGO_URI");
-const MONGO_DB = process.env.MONGO_DB ?? "ao-coverage";
-const HOST_DIR = configOrError("HOST_DIR");
-
-fs.accessSync(HOST_DIR, fs.constants.R_OK | fs.constants.W_OK);
-if (!path.isAbsolute(HOST_DIR)) {
- logger.error("HOST_DIR must be an absolute path");
- process.exit(1);
-}
-
-new MongoClient(MONGO_URI, { useUnifiedTopology: true }).connect(
- (err, mongo) => {
- if (err !== null) {
- logger.error(err ?? "Unable to connect to database");
- process.exit(1);
- }
-
- const app: express.Application = express();
- const metadata = new Metadata(mongo.db(MONGO_DB));
-
- app.use(
- expressWinston.logger({
- ...loggerConfig("HTTP"),
- colorize: true,
- // filter out token query param from URL
- msg:
- '{{req.method}} {{req.url.replace(/token=[-\\w.~]*(&*)/, "token=$1")}} - {{res.statusCode}} {{res.responseTime}}ms'
- })
- );
-
- // actual app routes
- app.use(routes(metadata));
-
- app.use(expressWinston.errorLogger(loggerConfig("_ERR")));
-
- const server = app.listen(PORT, BIND_ADDRESS, () => {
- logger.info("Express has started: http://%s:%d/", BIND_ADDRESS, PORT);
- });
-
- // application exit handling
- const signalCodes: NodeJS.Signals[] = ["SIGTERM", "SIGHUP", "SIGINT"];
- signalCodes.map((code: NodeJS.Signals) => {
- process.on(code, handleShutdown(mongo, server));
- });
- }
-);
+handleStartup().then(mongo => {
+ const app: express.Application = express();
+ const metadata = new Metadata(mongo.db(MONGO_DB));
+
+ app.use(
+ expressWinston.logger({
+ ...loggerConfig("HTTP"),
+ colorize: true,
+ // filter out token query param from URL
+ msg:
+ '{{req.method}} {{req.url.replace(/token=[-\\w.~]*(&*)/, "token=$1")}} - {{res.statusCode}} {{res.responseTime}}ms'
+ })
+ );
+
+ // actual app routes
+ app.use(routes(metadata));
+
+ app.use(expressWinston.errorLogger(loggerConfig("_ERR")));
+
+ const server = app.listen(PORT, BIND_ADDRESS, () => {
+ logger.info("Express has started: http://%s:%d/", BIND_ADDRESS, PORT);
+ });
+
+ // application exit handling
+ const signalCodes: NodeJS.Signals[] = ["SIGTERM", "SIGHUP", "SIGINT"];
+ signalCodes.map((code: NodeJS.Signals) => {
+ process.on(code, handleShutdown(mongo, server));
+ });
+});