Spaces:
Sleeping
Sleeping
File size: 2,279 Bytes
72ff90e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | const http = require("http");
const https = require("https");
const fs = require("fs");
const path = require("path");
const url = require("url");
const PORT = 7860;
const DIST_DIR = path.join(__dirname, "dist");
const BACKEND_URL = process.env.VITE_API_BASE_URL || "";
const MIME = {
".html": "text/html",
".js": "application/javascript",
".mjs": "application/javascript",
".css": "text/css",
".json": "application/json",
".png": "image/png",
".jpg": "image/jpeg",
".jpeg": "image/jpeg",
".svg": "image/svg+xml",
".ico": "image/x-icon",
".woff": "font/woff",
".woff2": "font/woff2",
".ttf": "font/ttf",
".webp": "image/webp",
};
console.log(`Starting server on port ${PORT}`);
console.log(`Backend URL: ${BACKEND_URL || "(not set)"}`);
const server = http.createServer((req, res) => {
const parsed = url.parse(req.url);
// Proxy /api/* to backend
if (parsed.pathname.startsWith("/api/") && BACKEND_URL) {
const backend = url.parse(BACKEND_URL);
const isHttps = backend.protocol === "https:";
const transport = isHttps ? https : http;
const options = {
hostname: backend.hostname,
port: backend.port || (isHttps ? 443 : 80),
path: req.url,
method: req.method,
headers: { ...req.headers, host: backend.hostname },
};
const proxyReq = transport.request(options, (proxyRes) => {
res.writeHead(proxyRes.statusCode, proxyRes.headers);
proxyRes.pipe(res);
});
proxyReq.on("error", (err) => {
console.error("Proxy error:", err.message);
res.writeHead(502);
res.end("Bad Gateway");
});
req.pipe(proxyReq);
return;
}
// Serve static files
let filePath = path.join(DIST_DIR, parsed.pathname);
try {
const stat = fs.statSync(filePath);
if (stat.isDirectory()) filePath = path.join(filePath, "index.html");
} catch {
// Not found → SPA fallback
filePath = path.join(DIST_DIR, "index.html");
}
fs.readFile(filePath, (err, data) => {
if (err) {
res.writeHead(404);
res.end("Not Found");
return;
}
const ext = path.extname(filePath).toLowerCase();
res.writeHead(200, { "Content-Type": MIME[ext] || "application/octet-stream" });
res.end(data);
});
});
server.listen(PORT);
|