add error checking
All checks were successful
Publish Docker Images / docker (push) Successful in 1m16s

This commit is contained in:
Lee 2023-11-16 14:03:04 +00:00
parent c9ec7f5912
commit 4402b42756
2 changed files with 52 additions and 31 deletions

@ -27,37 +27,43 @@ export default class ProxyRoute extends Route {
return; return;
} }
// TODO: handle rate limiting? and/or caching? // TODO: handle rate limiting? and/or caching?
const response = await axios.get(url, { try {
headers: { const response = await axios.get(url, {
"Content-Type": "application/json", headers: {
}, "Content-Type": "application/json",
}); },
const data = response.data; });
const headers = response.headers; const data = response.data;
const headers = response.headers;
// Is delete the best way to do this?? // Is delete the best way to do this??
// Remove CORS headers // Remove CORS headers
delete headers["access-control-allow-origin"]; delete headers["access-control-allow-origin"];
delete headers["access-control-allow-credentials"]; delete headers["access-control-allow-credentials"];
delete headers["access-control-allow-headers"]; delete headers["access-control-allow-headers"];
delete headers["access-control-allow-methods"]; delete headers["access-control-allow-methods"];
// Cloudflare headers // Cloudflare headers
delete headers["server"]; delete headers["server"];
delete headers["nel"]; delete headers["nel"];
delete headers["report-to"]; delete headers["report-to"];
delete headers["cf-cache-status"]; delete headers["cf-cache-status"];
delete headers["cf-ray"]; delete headers["cf-ray"];
delete headers["alt-svc"]; delete headers["alt-svc"];
// Misc headers // Misc headers
delete headers["transfer-encoding"]; delete headers["transfer-encoding"];
// Add node specific headers // Add node specific headers
headers["x-proxy-node"] = process.env.NODE_ID; headers["x-proxy-node"] = process.env.NODE_ID;
headers["x-proxy-response-time"] = Date.now() - before + "ms"; headers["x-proxy-response-time"] = Date.now() - before + "ms";
// Return the JSON response // Return the JSON response
res.status(response.status).set(headers).json(data); res.status(response.status).set(headers).json(data);
} catch (ex) {
res
.status(500)
.json(RouteMessages.internalServerError("Error fetching URL"));
}
} }
} }

@ -2,6 +2,8 @@ import { Request, Response } from "express";
import { Route, RouteMessages } from "server"; import { Route, RouteMessages } from "server";
import { nodeManager } from ".."; import { nodeManager } from "..";
const IGNORED_PATHS = ["/favicon.ico"];
export default class ProxyRoute extends Route { export default class ProxyRoute extends Route {
constructor() { constructor() {
super({ path: "/" }); super({ path: "/" });
@ -13,6 +15,10 @@ export default class ProxyRoute extends Route {
res.status(400).json(RouteMessages.badRequest("No URL provided")); res.status(400).json(RouteMessages.badRequest("No URL provided"));
return; return;
} }
if (IGNORED_PATHS.includes(url)) {
res.status(404).send("Not found");
return;
}
const node = nodeManager.getRandomNode(); const node = nodeManager.getRandomNode();
if (!node) { if (!node) {
@ -22,10 +28,19 @@ export default class ProxyRoute extends Route {
return; return;
} }
const response = await node.fetch(url); try {
const data = response.data; const response = await node.fetch(url);
const data = response.data;
// Return the JSON response if (response.status === 500) {
res.status(response.status).set(response.headers).json(data); 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));
}
} }
} }