From 415b9f892887d3d40cebf1a4123dbe3922c41238 Mon Sep 17 00:00:00 2001 From: Liam Date: Mon, 20 Nov 2023 15:42:08 +0000 Subject: [PATCH] add route logging and a generic error handler for routes --- src/route/messages.ts | 48 +++++++++++++++++++++++++++++++++++++++++++ src/server/server.ts | 16 ++++++++++++++- 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/route/messages.ts diff --git a/src/route/messages.ts b/src/route/messages.ts new file mode 100644 index 0000000..f113ae3 --- /dev/null +++ b/src/route/messages.ts @@ -0,0 +1,48 @@ +/** + * Creates the base message for web responses + * + * @param message the message to send + * @returns the message + */ +function baseMessage(error: boolean, message: string) { + return { + error, + message, + }; +} + +/** + * Creates an error message for web responses + * + * @param message the message to send + * @returns the message + */ +function errorMessage(message: string) { + return baseMessage(true, message); +} + +/** + * Creates a success message for web responses + * + * @param message the message to send + * @returns the message + */ +function successMessage(message: string) { + return baseMessage(false, message); +} + +/** + * Creates a message for an internal server error + * + * @returns the message + */ +function internalServerError() { + return errorMessage("Internal Server Error"); +} + +export const ServerMessages = { + baseMessage, + errorMessage, + successMessage, + internalServerError, +}; diff --git a/src/server/server.ts b/src/server/server.ts index 535b358..cbe7d36 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -1,4 +1,5 @@ import express, { Express } from "express"; +import { ServerMessages } from "../route/messages"; import { Route } from "../route/route"; type ServerConfig = { @@ -32,13 +33,26 @@ export default class Server { this.server = express(); this.preInit(); + // Setup route logging + this.server.use((req, res, next) => { + // TODO: make this look better? + console.log(`[${req.method}] ${req.path}`); + next(); + }); + // Handle the routes for (const route of this.routes) { this.server.all(route.getPath(), (req, res, next) => { if (req.method.toUpperCase() !== route.getMethod().toUpperCase()) { return next(); // Skip this method } - route.handle(req, res, next); + try { + route.handle(req, res, next); + } catch (ex) { + console.error(ex); + // Inform the user that an internal server error occurred + res.status(500).json(ServerMessages.internalServerError()); + } }); }