Warum localhost ein Gefängnis ist und wie man ausbricht
\n\nSie starten Ihren Server auf localhost:3000, 127.0.0.1:5173 oder [::1]:8080 – alles funktioniert perfekt. Bis Sie einen Kollegen oder Freund bitten, Ihr Projekt zu öffnen. Und dann beginnt es: „Seite nicht erreichbar“, „Connection refused“, „ERR_CONNECTION_REFUSED“. Kommt Ihnen das bekannt vor?
Das Problem ist, dass localhost (oder 127.0.0.1) eine Loopback-Schnittstelle ist. Ihr Server hört nur darauf. Das ist, als würden Sie in einen leeren Raum schreien: Sie hören sich selbst, aber niemand draußen tut es. In diesem Artikel werden wir behandeln, wie Sie einen lokalen Server in einen öffentlichen (oder zumindest im lokalen Netzwerk erreichbaren) Server mit TypeScript verwandeln. Keine Magie, nur bewährte Methoden.
Wir beantworten die häufigsten Fragen von Stack Overflow (wo dieses Thema tausende Aufrufe gesammelt hat) und geben fertige Lösungen für Express, Node.js und Vite.
\n\n1. Grundlagen: Was bedeutet „auf allen Schnittstellen hören“?
\n\nWenn Sie app.listen(3000) in Express schreiben, hört der Server standardmäßig nur auf localhost. Um den Zugriff von außen zu ermöglichen, müssen Sie 0.0.0.0 (alle IPv4-Schnittstellen) oder :: (alle IPv6) angeben.
So sieht das in TypeScript aus:
\n\nimport express from 'express';\n\nconst app = express();\nconst PORT = 3000;\n\n// Auf allen Schnittstellen hören\napp.listen(PORT, '0.0.0.0', () => {\n console.log(`Server läuft auf http://0.0.0.0:${PORT}`);\n console.log(`Im lokalen Netzwerk über Ihre IP erreichbar`);\n});\n\n\nJetzt ist der Server nicht nur über localhost, sondern auch über die lokale IP Ihres Computers erreichbar (z.B. 192.168.1.10:3000).
Wie finde ich meine lokale IP?
\n- \n
- Windows:
ipconfig→ suchen Sie die IPv4-Adresse \n - macOS/Linux:
ifconfigoderip addr→ Zeileinet 192.168.x.x\n
Aber das ist nur der erste Schritt. Oft liegt das Problem tiefer – Firewall, CORS oder dass der Server immer noch nicht von anderen Geräten antwortet.
\n\n2. CORS: Warum blockiert der Browser Anfragen?
\n\nSelbst wenn Sie den Zugriff über das Netzwerk geöffnet haben, kann der Browser Anfragen von einer anderen Domain blockieren. Das ist die CORS-Richtlinie (Cross-Origin Resource Sharing). Die Lösung besteht darin, die Header auf dem Server zu konfigurieren.
\n\nInstallieren Sie das Paket cors für Express:
npm install cors\nnpm install @types/cors --save-dev\n\n\nBinden Sie es in den TypeScript-Server ein:
\n\nimport express from 'express';\nimport cors from 'cors';\n\nconst app = express();\n\n// Alle Quellen erlauben (für die Entwicklung)\napp.use(cors({\n origin: '*',\n methods: ['GET', 'POST', 'PUT', 'DELETE'],\n allowedHeaders: ['Content-Type', 'Authorization']\n}));\n\napp.listen(3000, '0.0.0.0', () => {\n console.log('CORS aktiviert, Server von außen erreichbar');\n});\n\n\nWichtig: Verwenden Sie in der Produktion nicht origin: '*' – geben Sie stattdessen konkrete Domains an.
3. Firewall: Der unsichtbare Blocker
\n\nAuch wenn der Server auf 0.0.0.0 hört, kann Ihre Firewall eingehende Verbindungen blockieren. Dies ist ein häufiger Grund, warum der Zugriff von außen nicht funktioniert.
So öffnen Sie einen Port (am Beispiel Windows):
\n- \n
- Öffnen Sie die „Windows Defender Firewall“ \n
- Klicken Sie auf „Erweiterte Einstellungen“ \n
- Erstellen Sie eine Regel für eingehende Verbindungen \n
- Geben Sie den Port (z.B. 3000) und das Protokoll (TCP) an \n
- Erlauben Sie die Verbindung \n
Unter macOS/Linux verwenden Sie ufw oder iptables:
# Port 3000 über ufw freigeben\nsudo ufw allow 3000/tcp\n\n\n