Add more error handling in the server
authorRaphaël Jakse <raphael.jakse@univ-grenoble-alpes.fr>
Sun, 5 Apr 2020 19:05:48 +0000 (21:05 +0200)
committerRaphaël Jakse <raphael.jakse@univ-grenoble-alpes.fr>
Sun, 5 Apr 2020 19:05:48 +0000 (21:05 +0200)
trivabble-server.js

index bd3005a1d619f2f2588b5e790353a9001178be86..530495f5bae972e0d725f0fd6df446fef887f740 100644 (file)
@@ -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);
+});