mitmario.dev

Browser gegen Node

Node.js Sandbox 3 Min Lesezeit 3 BeispieleLektion 3 von 6

Der häufigste Fehler beim Umstieg auf Node ist kein Syntaxfehler. Es ist der Griff nach document oder localStorage, weil die Finger ihn tausendmal getippt haben. Diese Lektion räumt einmal auf, damit du nicht bei jeder Fehlermeldung neu überlegen musst.

Drei Spalten im Kopf

Nur im Browser: window, document, localStorage, sessionStorage, alert, location, navigator, alles rund um das DOM. Diese Namen gehören zur Seite, und in Node gibt es keine Seite.

Nur in Node: process (der laufende Prozess samt Argumenten, Umgebung und Exit-Code), require, __dirname und __filename, der Zugriff auf Dateien über node:fs, das Anlegen eines Servers über node:http. Diese Namen gehören zum Rechner, und im Browser hat dein Code keinen Rechner, sondern eine Seite.

Was es nur in Node gibt
console.log("Node-Version:", process.version);
console.log("Verzeichnis:", process.cwd());
console.log("Plattform:", process.platform);

process ist der Name, der dir in diesem Kurs am häufigsten begegnet. Er beschreibt das laufende Programm selbst: welche Version von Node es ausführt, in welchem Verzeichnis es gestartet wurde, auf welchem Betriebssystem. Abschnitt 4 nimmt sich process im Ganzen vor.

In beiden: die komplette Sprache. Variablen, Funktionen, Klassen, map, filter, reduce, async und await, Destructuring, Spread. Dazu eine ganze Reihe eingebauter Objekte, die kein Browser-Zubehör sind, sondern zum Standard gehören.

Was in beiden Welten dasselbe ist
const adresse = new URL("https://mitmario.dev/lernen/nodejs?ab=1");
console.log(adresse.hostname);
console.log(adresse.searchParams.get("ab"));
console.log(JSON.stringify({ kurs: "Node", frei: false }));
console.log(new Date("2026-08-06T10:00:00Z").toISOString());

JSON, Date, Math, URL, Map, Set, Promise, setTimeout, console, crypto und seit einigen Jahren auch fetch: das alles läuft hier wie dort. Diese gemeinsame Mitte ist über die Jahre gewachsen. fetch gab es in Node lange nicht, jetzt schon.

globalThis ist die Brücke

Im Browser gibt es window, in Node nicht. In Node gibt es global, im Browser nicht. Beide sind dasselbe Konzept: das Objekt, an dem die globalen Namen hängen.

Weil das lästig war, gibt es seit einigen Jahren globalThis. Der Name existiert in beiden Welten und zeigt jeweils auf das richtige Objekt. Wer Code schreibt, der an beiden Orten laufen soll, nimmt ihn.

Fragen, ohne anzufassen

Jetzt kommt der Teil, den du in der Aufgabe gleich brauchst.

Wenn du auf einen Namen zugreifst, den es nicht gibt, bricht dein Programm ab. Nicht mit einer Warnung, sondern mit einem ReferenceError. Das gilt für document in Node genauso wie für irgendeinen Tippfehler.

Es gibt genau einen Weg, nach einem Namen zu fragen, ohne ihn anzufassen: typeof.

Fragen statt anfassen
// Ein direkter Zugriff auf einen unbekannten Namen bricht ab.
// typeof fragt nur nach und gibt "undefined" zurück.
console.log(typeof process);
console.log(typeof document);
console.log(typeof globalThis);

typeof ist ein Operator und kein Funktionsaufruf, und er hat eine Eigenschaft, die sonst nichts hat: Er wirft auch dann keinen Fehler, wenn der Name überhaupt nicht existiert. Dann liefert er die Zeichenkette "undefined".

Merk dir die Schreibweise mit dem Vergleich auf die Zeichenkette:

Für eine Prüfung schreibst du typeof document === "undefined". Das doppelte undefined ist verwirrend, aber richtig: Links steht der Operator, rechts der Text, den er zurückgibt, und der ist ein ganz normaler String in Anführungszeichen.

Warum das praktisch zählt

Code, der nur die gemeinsame Mitte benutzt, läuft an beiden Orten. Das ist kein akademischer Punkt, sondern der Grund für eine Aufteilung, die du in echten Projekten überall siehst: die Rechenlogik in eigenen Dateien, die nichts über Fenster und nichts über Dateisysteme wissen, und drumherum eine dünne Schicht, die den Ort kennt.

Abschnitt 18 greift das als Projektstruktur wieder auf. Bis dahin reicht die Beobachtung: Je weniger dein Kern über seinen Ort weiß, desto leichter lässt er sich testen und desto länger überlebt er einen Umzug.

Zum Mitnehmen

typeof funktioniert auch bei Namen, die es gar nicht gibt. Das ist der einzige Weg, nach etwas zu fragen, ohne es anzufassen.

Jetzt du

Basis Konto, kostenlos

Zu dieser Lektion gehört eine Aufgabe. Du schreibst den Code selbst, und nach jedem Lauf sagt dir eine Prüfliste, was schon stimmt.

Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.

In diesem Kurs läuft dein Code auf einem Server. Dafür hat das Basis Konto 1 Stunde im Monat, mehr Zeit gibt es mit dem Premium Konto.

Was in dieser Lektion steckt

  • Artikel mit 3 Beispielen zum Ausprobieren

    Steht hier, ohne Konto lesbar.

  • Aufgabe, dein Code läuft auf einem Server

    Öffnet sich mit dem Basis Konto.