Begegnet ist das jedem, der das erste Mal einen Node-Dienst startet. Wer Host und Port nicht versteht, verbringt Stunden mit Suchen statt mit einer bewussten Entscheidung in einer Zeile.
Ein Port ist eine Nummer zwischen 0 und 65535, die angibt, welcher Dienst auf einem Rechner Anfragen empfängt. Beim Start übergibt der Prozess beides an das Betriebssystem, das dann Verbindungen an ihn weiterleitet.
In Express bindet app.listen(3000) den Dienst standardmäßig an alle Netzwerkschnittstellen. Dagegen bindet app.listen(3000, localhost) ihn nur an die Schnittstelle zum eigenen Rechner. localhost ist der Netzwerkname für den eigenen Rechner und löst zur Adresse 127.0.0.1 auf. Verbindungen auf diese Adresse verlassen den Rechner nicht, weshalb andere Geräte den Dienst nicht erreichen können.
Das ist oft Absicht: Beim lokalen Testen bleibt der Dienst so unsichtbar nach außen. In Container-Umgebungen wie Docker ist dagegen 0.0.0.0 (die Adresse für alle Netzwerkschnittstellen) erforderlich, weil der Dienst sonst nur innerhalb des Containers erreichbar ist. Bewährt hat sich, den Host aus einer Umgebungsvariable zu lesen, einem Name-Wert-Paar, das das Betriebssystem jedem Prozess beim Start mitgibt, etwa HOST=localhost beim Testen und HOST=0.0.0.0 im Betrieb.
Verwechselt wird der Host gern mit der Portnummer. Hakt es, weil ein Port wie 3000 schon belegt ist, meldet Node EADDRINUSE – „address already in use“. Dann unter Linux und macOS mit lsof -i :3000 den Prozess suchen, nicht die Nummer wechseln.
Der Host ist nicht Schnickschnack, sondern die Frage: Wer darf mich erreichen? localhost schützt, 0.0.0.0 öffnet.
📌 Host binden · Port nummerieren · EADDRINUSE klären
📚 Webentwicklung von Grund auf · Tag 22 von 30
#NodeJS #backend #webdev