Node.js Tutorial mit ausführbaren Beispielen
Ein kostenloses Node.js Tutorial mit Beispielen, die auf der Seite laufen: Dateien, Module, die Event Loop, Express-Server, an die du Requests schickst, MongoDB und JWT. Ändere den Code und starte ihn neu.
Kurs startenErste Schritte
- Was ist Node.jsNode.js ist eine Runtime, die JavaScript außerhalb des Browsers ausführt, auf Servern und im Terminal. Es ist keine Sprache und kein Framework: Es ist V8 plus eine Event Loop plus APIs für Dateien, Netzwerk und Prozesse.
- Node.js vs. JavaScriptJavaScript ist die Sprache; Node.js ist ein Programm, das sie außerhalb des Browsers ausführt. Die Syntax ist identisch, aber die Globals und eingebauten APIs um deinen Code herum sind andere.
- process.argvprocess.argv ist ein Array mit der Kommandozeile, die dein Programm gestartet hat: die node-Programmdatei, der Pfad des Skripts, dann jedes Argument, das du eingegeben hast. Mit process.argv.slice(2) bekommst du nur deine Argumente.
- process.envprocess.env ist ein Objekt mit den Umgebungsvariablen, mit denen dein Node.js-Programm gestartet wurde. Jeder Wert ist ein String oder undefined, Zahlen und Booleans wandelst du also selbst um und gibst jeder Variable einen Standardwert.
- Benutzereingaben lesenNode.js hat keine prompt()-Funktion. Um dem Nutzer im Terminal eine Frage zu stellen, erstellst du ein readline-Interface auf process.stdin und rufst question() auf, oder du wartest mit readline/promises per await darauf.
Dateien und Pfade
- fs.readFileEine Datei liest du in Node.js mit fs.readFile (Callback), fs.readFileSync oder await readFile aus fs/promises. Übergib 'utf8', um einen String zu bekommen, und behandle ENOENT, wenn die Datei fehlt.
- fs.writeFileEine Datei schreibst du in Node.js mit fs.writeFile, fs.writeFileSync oder await writeFile aus fs/promises. Fehlt die Datei, wird sie angelegt, existiert sie, wird sie ersetzt; mit appendFile hängst du ans Ende an.
- fs/promisesfs/promises ist die Promise-Variante des fs-Moduls von Node: readFile, writeFile, readdir, stat, mkdir, rm und rename geben alle Promises zurück, auf die du mit await wartest, und Fehler fängst du mit try/catch.
- path-ModulDas path-Modul baut Dateipfade richtig für das Betriebssystem zusammen und nimmt sie auseinander. path.join fügt Segmente zusammen; path.resolve macht daraus einen absoluten Pfad, ausgehend vom aktuellen Ordner.
Asynchrones Node
- Event LoopDie Node.js Event Loop führt deine Callbacks in Phasen aus (timers, poll, check, close), und zwischen zwei Callbacks leert sie zuerst die process.nextTick-Queue und dann die Promise-Queue. Führ die Beispiele aus und sieh dir die genaue Reihenfolge an.
- EventEmitterEventEmitter aus dem events-Modul von Node lässt ein Objekt benannte Events mit emit ankündigen, und anderer Code reagiert darauf mit on oder once. Listener laufen synchron, in der Reihenfolge, in der sie hinzugefügt wurden.
HTTP und Express
- HTTP-Server`http.createServer()` nimmt eine Funktion, die bei jeder Anfrage mit `req` und `res` läuft. Aus `req` liest du Methode und URL, dann setzt du auf `res` Status, Header und Body und rufst `res.end()` auf.
- Express RoutingEine Route in Express ist eine Methode, ein Pfad und ein Handler: `app.get('/users/:id', handler)`. Fass zusammengehörige Routen in einem `express.Router()` zusammen und häng ihn mit `app.use('/api', router)` unter einem Präfix ein.
- Express MiddlewareExpress Middleware ist eine Funktion `(req, res, next)`, die vor deinem Route-Handler läuft. Sie kann die Anfrage lesen oder ändern, sie mit einer Antwort beenden oder mit `next()` weitergeben.
- req.params, query, body`req.params` enthält die benannten Teile des Pfads (`/users/:id`), `req.query` den Query-String (`?sort=new`) und `req.body` den geparsten Request-Body, der `undefined` bleibt, bis du einen Body-Parser wie `express.json()` hinzufügst.
- Error HandlingEin Error Handler in Express ist eine Middleware mit vier Argumenten, `(err, req, res, next)`, die nach deinen Routen registriert wird. Express 5 schickt ihr geworfene Fehler, `next(err)`-Aufrufe und abgelehnte Promises aus async-Handlern.
- express.static`app.use(express.static(path.join(__dirname, 'public')))` liefert jede Datei im Ordner `public` unter der passenden URL aus: `public/style.css` beantwortet `/style.css`. Mit einem Einhängepfad liegen sie unter einem Präfix.
- CORS in ExpressEin CORS-Fehler heißt, dass der Browser einer Seite das Lesen der Antwort deiner API verweigert hat, weil die Antwort den Origin der Seite nicht erlaubt hat. Du behebst ihn auf dem Server, indem du `Access-Control-Allow-Origin` sendest und Preflight-`OPTIONS`-Anfragen beantwortest, von Hand oder mit dem Paket `cors`.
Daten und Authentifizierung
- MongoDBMongoDB nutzt du in Node.js mit dem offiziellen Treiber mongodb: Verbinde dich mit MongoClient und füge dann Dokumente in einer Collection ein, finde, ändere und lösche sie, alles mit async/await.
- JWTEin JWT ist ein signiertes Token aus drei base64url-Teilen, das ein Server beim Login ausstellt und bei jeder Anfrage prüft. In Node.js signierst und prüfst du es mit dem Paket jose oder jsonwebtoken und einem geheimen Schlüssel.