From 4402b42756f5f78410df71fdd684abd64cdec1b2 Mon Sep 17 00:00:00 2001 From: Liam Date: Thu, 16 Nov 2023 14:03:04 +0000 Subject: [PATCH] add error checking --- apps/node/src/routes/proxy.ts | 60 +++++++++++++++++++--------------- apps/proxy/src/routes/proxy.ts | 23 ++++++++++--- 2 files changed, 52 insertions(+), 31 deletions(-) diff --git a/apps/node/src/routes/proxy.ts b/apps/node/src/routes/proxy.ts index 1243b29..a07c263 100644 --- a/apps/node/src/routes/proxy.ts +++ b/apps/node/src/routes/proxy.ts @@ -27,37 +27,43 @@ export default class ProxyRoute extends Route { return; } // TODO: handle rate limiting? and/or caching? - const response = await axios.get(url, { - headers: { - "Content-Type": "application/json", - }, - }); - const data = response.data; - const headers = response.headers; + try { + const response = await axios.get(url, { + headers: { + "Content-Type": "application/json", + }, + }); + const data = response.data; + const headers = response.headers; - // Is delete the best way to do this?? - // Remove CORS headers - delete headers["access-control-allow-origin"]; - delete headers["access-control-allow-credentials"]; - delete headers["access-control-allow-headers"]; - delete headers["access-control-allow-methods"]; + // Is delete the best way to do this?? + // Remove CORS headers + delete headers["access-control-allow-origin"]; + delete headers["access-control-allow-credentials"]; + delete headers["access-control-allow-headers"]; + delete headers["access-control-allow-methods"]; - // Cloudflare headers - delete headers["server"]; - delete headers["nel"]; - delete headers["report-to"]; - delete headers["cf-cache-status"]; - delete headers["cf-ray"]; - delete headers["alt-svc"]; + // Cloudflare headers + delete headers["server"]; + delete headers["nel"]; + delete headers["report-to"]; + delete headers["cf-cache-status"]; + delete headers["cf-ray"]; + delete headers["alt-svc"]; - // Misc headers - delete headers["transfer-encoding"]; + // Misc headers + delete headers["transfer-encoding"]; - // Add node specific headers - headers["x-proxy-node"] = process.env.NODE_ID; - headers["x-proxy-response-time"] = Date.now() - before + "ms"; + // Add node specific headers + headers["x-proxy-node"] = process.env.NODE_ID; + headers["x-proxy-response-time"] = Date.now() - before + "ms"; - // Return the JSON response - res.status(response.status).set(headers).json(data); + // Return the JSON response + res.status(response.status).set(headers).json(data); + } catch (ex) { + res + .status(500) + .json(RouteMessages.internalServerError("Error fetching URL")); + } } } diff --git a/apps/proxy/src/routes/proxy.ts b/apps/proxy/src/routes/proxy.ts index 1f0d214..1eee093 100644 --- a/apps/proxy/src/routes/proxy.ts +++ b/apps/proxy/src/routes/proxy.ts @@ -2,6 +2,8 @@ import { Request, Response } from "express"; import { Route, RouteMessages } from "server"; import { nodeManager } from ".."; +const IGNORED_PATHS = ["/favicon.ico"]; + export default class ProxyRoute extends Route { constructor() { super({ path: "/" }); @@ -13,6 +15,10 @@ export default class ProxyRoute extends Route { res.status(400).json(RouteMessages.badRequest("No URL provided")); return; } + if (IGNORED_PATHS.includes(url)) { + res.status(404).send("Not found"); + return; + } const node = nodeManager.getRandomNode(); if (!node) { @@ -22,10 +28,19 @@ export default class ProxyRoute extends Route { return; } - const response = await node.fetch(url); - const data = response.data; + try { + const response = await node.fetch(url); + const data = response.data; - // Return the JSON response - res.status(response.status).set(response.headers).json(data); + if (response.status === 500) { + res.status(500).json(RouteMessages.internalServerError(data)); + return; + } + + // Return the JSON response + res.status(response.status).set(response.headers).json(data); + } catch (ex: any) { + res.status(500).json(RouteMessages.internalServerError(ex.message || ex)); + } } }