diff options
Diffstat (limited to 'src/index.ts')
| -rw-r--r-- | src/index.ts | 82 |
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)); + }); +}); |
