Spaces:
				
			
			
	
			
			
					
		Running
		
			on 
			
			CPU Upgrade
	
	
	
			
			
	
	
	
	
		
		
					
		Running
		
			on 
			
			CPU Upgrade
	| const express = require("express"); | |
| const cors = require("cors"); | |
| const compression = require("compression"); | |
| const path = require("path"); | |
| const serveStatic = require("serve-static"); | |
| const { createProxyMiddleware } = require("http-proxy-middleware"); | |
| const app = express(); | |
| const port = process.env.PORT || 7860; | |
| const apiPort = process.env.INTERNAL_API_PORT || 7861; | |
| // Enable CORS for all routes | |
| app.use(cors()); | |
| // Enable GZIP compression | |
| app.use(compression()); | |
| // Proxy all API requests to the Python backend | |
| app.use( | |
| "/api", | |
| createProxyMiddleware({ | |
| target: `http://127.0.0.1:${apiPort}`, | |
| changeOrigin: true, | |
| onError: (err, req, res) => { | |
| console.error("Proxy Error:", err); | |
| res.status(500).json({ error: "Proxy Error", details: err.message }); | |
| }, | |
| }) | |
| ); | |
| // Serve static files from the build directory | |
| app.use( | |
| express.static(path.join(__dirname, "build"), { | |
| // Don't cache HTML files | |
| setHeaders: (res, path) => { | |
| if (path.endsWith(".html")) { | |
| res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); | |
| res.setHeader("Pragma", "no-cache"); | |
| res.setHeader("Expires", "0"); | |
| } else { | |
| // Cache other static resources for 1 year | |
| res.setHeader("Cache-Control", "public, max-age=31536000"); | |
| } | |
| }, | |
| }) | |
| ); | |
| // Middleware to preserve URL parameters | |
| app.use((req, res, next) => { | |
| // Don't interfere with API requests | |
| if (req.url.startsWith("/api")) { | |
| return next(); | |
| } | |
| // Preserve original URL parameters | |
| req.originalUrl = req.url; | |
| next(); | |
| }); | |
| // Handle all other routes by serving index.html | |
| app.get("*", (req, res) => { | |
| // Don't interfere with API requests | |
| if (req.url.startsWith("/api")) { | |
| return next(); | |
| } | |
| // Headers for client-side routing | |
| res.set({ | |
| "Cache-Control": "no-cache, no-store, must-revalidate", | |
| Pragma: "no-cache", | |
| Expires: "0", | |
| }); | |
| // Send index.html for all other routes | |
| res.sendFile(path.join(__dirname, "build", "index.html")); | |
| }); | |
| app.listen(port, "0.0.0.0", () => { | |
| console.log( | |
| `Frontend server is running on port ${port} in ${ | |
| process.env.NODE_ENV || "development" | |
| } mode` | |
| ); | |
| console.log(`API proxy target: http://127.0.0.1:${apiPort}`); | |
| }); | |
