mitmario.dev

Dein erstes Skript

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

Im Browser hast du eine HTML-Datei geöffnet, und der Browser hat dein Skript gefunden. In Node startest du die Datei direkt:

Auf der Kommandozeile steht dafür node index.js. Vorne der Name des Programms, dahinter die Datei, die es ausführen soll. Mehr braucht es nicht. Keine HTML-Datei, kein <script>-Tag, kein Server, der etwas ausliefert.

Was danach passiert

Node liest die Datei einmal von oben nach unten und führt sie aus. Das erste Beispiel ist so langweilig, wie es aussieht, und genau deshalb ist es das erste.

Von oben nach unten und dann fertig
console.log("Erste Zeile");
console.log("Zweite Zeile");
console.log("Fertig");

Drei Zeilen, drei Ausgaben, in der Reihenfolge, in der sie im Code stehen. Danach ist der Prozess zu Ende und die Kommandozeile gehört wieder dir.

console.log funktioniert dabei genau wie gewohnt, nur landet die Ausgabe nicht in einer Entwicklerkonsole, sondern auf der Standardausgabe. Das ist der Kanal, über den ein Programm auf der Kommandozeile spricht. Rechts in diesem Kurs siehst du genau ihn, sobald du etwas laufen lässt.

Wann ein Prozess endet

Jetzt der Satz, den du dir merken solltest, weil er dir in Abschnitt 8 wieder begegnet:

Ein Node-Prozess endet, sobald nichts mehr auf ihn wartet.

Nicht, wenn die letzte Zeile durch ist. Sondern, wenn niemand mehr etwas von ihm will. Das zweite Beispiel zeigt den Unterschied.

Ein Timer hält den Prozess am Leben
console.log("Vorher");

setTimeout(() => {
  console.log("Zwei Sekunden später");
}, 2000);

console.log("Nachher");

Die letzte Zeile der Datei ist nach wenigen Millisekunden erreicht, und trotzdem läuft das Programm noch zwei Sekunden weiter. Der Grund ist der Timer: Node weiß, dass da noch etwas kommt, und hält den Prozess deshalb offen. Erst wenn der Timer abgelaufen ist und seine Funktion gelaufen ist, ist wirklich nichts mehr zu tun.

Achte auch auf die Reihenfolge: Nachher wird vor Zwei Sekunden später geschrieben, obwohl es im Code darunter steht. Das kennst du aus dem Browser, und in Node gilt es genauso. Abschnitt 6 nimmt sich diese Reihenfolge im Detail vor.

Dasselbe Prinzip erklärt später etwas, das im ersten Moment seltsam wirkt: Ein Server, der auf einem Port lauscht, ist für Node ein „da kommt noch etwas”. Deshalb endet ein Serverprogramm nicht von selbst, sondern läuft, bis jemand es beendet. Das ist kein Sonderfall, das ist dieselbe Regel.

Zwei Ausgabekanäle statt einem

Im Browser landet alles in derselben Konsole, farblich unterschieden. Auf der Kommandozeile sind es zwei getrennte Kanäle: stdout für normale Ausgaben, stderr für Fehler und Warnungen.

Die beiden Kanäle sehen gleich aus und sind es nicht
console.log("Das ist eine normale Meldung");
console.error("Das ist eine Fehlermeldung");

Auf dem Bildschirm sieht man den Unterschied nicht. Für ein anderes Programm, das deine Ausgabe weiterverarbeitet, ist er entscheidend: Es kann das Ergebnis einsammeln und die Meldungen danebenstehen lassen. In diesem Kurs stehen die beiden Kanäle im Terminal getrennt untereinander, damit du gleich siehst, welcher gerade spricht. Lektion 4.3 zeigt, wann du welchen benutzt.

Wo du in diesem Kurs arbeitest

Der Aufbau ist derselbe wie in den Kursen davor, mit einem Unterschied.

In der Mitte liegt der Editor mit deinen Dateien. Darunter liegt das Terminal, und dort steht, was dein Programm ausgibt: erst die Standardausgabe, darunter der Fehlerkanal, falls er etwas zu sagen hatte. Über jeder Ausgabe steht der Befehl, der sie erzeugt hat, auch wenn du ihn nicht selbst getippt hast. In den Kursen davor stand das Ergebnis rechts. Ein Skript hat keine Seite, es hat eine Ausgabe, und die liest man von oben nach unten.

Rechts steht ein Browser, und bis Abschnitt 8 bleibt er leer. Das ist kein Fehler: Ein Browser zeigt, was ein Server ihm geantwortet hat, und bis dahin läuft keiner. Ab Abschnitt 8 baust du einen, und ab dann steht dort deine Seite.

Im Terminal kannst du auch selbst tippen; Abschnitt 3 zeigt, was das kann.

Und noch ein Unterschied, der dir gleich auffallen wird: Hier läuft nichts einfach so mit. Dein Code läuft auf einem echten Server, und diese Rechenzeit kostet Geld. Deshalb entscheidest du, wann etwas passiert. Prüfen fährt deine Lösung einmal durch und füllt die Prüfliste. Sandbox starten hält die Maschine für eine Weile am Laufen, und dann zieht ein Beispiel bei jeder Änderung an deinem Code von selbst nach. Lektion 1.5 erklärt diese Umgebung im Ganzen.

Zum Mitnehmen

Ein Node-Prozess endet von selbst, sobald nichts mehr auf ihn wartet. Merk dir diesen Satz, ab Abschnitt 8 erklärt er, warum ein Server nicht aufhört.

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.