add error checking
All checks were successful
Publish Docker Images / docker (push) Successful in 1m16s
All checks were successful
Publish Docker Images / docker (push) Successful in 1m16s
This commit is contained in:
parent
c9ec7f5912
commit
4402b42756
@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user