From 52562dbebabbe07012b5e6a3224f3e6a906da90c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rapha=C3=ABl=20Jakse?= Date: Sun, 5 Apr 2020 21:05:48 +0200 Subject: [PATCH] Add more error handling in the server --- trivabble-server.js | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/trivabble-server.js b/trivabble-server.js index bd3005a..530495f 100644 --- a/trivabble-server.js +++ b/trivabble-server.js @@ -113,6 +113,7 @@ let dateNow = 0; let saveTimeout = null; let running = true; +const server = http.createServer(handleRequest); function saveGames(exit) { fs.writeFile("games.backup.json", JSON.stringify(games), function (err) { @@ -123,8 +124,7 @@ function saveGames(exit) { } if (exit) { - // eslint-disable-next-line no-process-exit - process.exit(0); + server.close(); } }); @@ -820,7 +820,17 @@ function handleRequest(request, response) { dateNow = Date.now(); debuglog("RECEIVED", request.url, post, responseAndIsES[1]); - handleCommands(post && JSON.parse(post), responseAndIsES); + + try { + post = post && JSON.parse(post); + } catch (e) { + response.statusCode = 400; + response.setHeader("application/json"); + response.end('{"error":1, "reason": "Unable to parse your JSON data"}'); + return; + } + + handleCommands(post, responseAndIsES); }); } @@ -842,7 +852,11 @@ fs.readFile("games.backup.json", function (err, data) { console.error("WARNING: ", e); } - http.createServer(handleRequest).listen(port, function() { + server.on("error", function (error) { + console.error("An error happened in the HTTP server", error); + }); + + server.listen(port, function() { console.log("Server listening on: http://localhost:%s", port); }); }); @@ -857,3 +871,7 @@ process.once("SIGTERM", function () { console.log("SIGTERM received..."); stop(); }); + +process.on("uncaughtException", function (err) { + console.log(err); +}); -- 2.30.2