💚 Was ist Node.js?
📖 Definition
Node.js ist eine JavaScript-Laufzeitumgebung, die auf Chromes V8-Engine aufgebaut ist. Sie ermöglicht die Ausführung von JavaScript außerhalb von Browsern mit asynchroner ereignisgesteuerter Architektur für hohe Leistung und Skalierbarkeit. Bietet ein riesiges Bibliotheks-Ökosystem über npm (Node Package Manager).
🎯 Einfache Analogie
Restaurant-Küche
Traditioneller Server (Synchron)
└─ Ein Koch bedient Kunden nacheinander (langsam)
Node.js (Asynchron)
├─ Ein Koch bearbeitet mehrere Bestellungen gleichzeitig
├─ Während Steak brät → Salat vorbereiten
└─ Schnell und effizient!
⚙️ Event Loop
┌─────────────┐
│ Call Stack │ Code wird ausgeführt
└──────┬──────┘
│
┌──────▼──────┐
│ Event Loop │ Koordinator
└──────┬──────┘
│
┌────┴─────┐
│ │
Microtask Task Queue
(Promise) (setTimeout)
💡 Wichtige Beispiele
Basis-HTTP-Server
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('<h1>Hallo, Node.js!</h1>');
});
server.listen(3000, () => {
console.log('Server läuft auf http://localhost:3000');
});
Express API
const express = require('express');
const app = express();
app.use(express.json());
app.get('/api/users', (req, res) => {
res.json([
{ id: 1, name: 'Hans' },
{ id: 2, name: 'Maria' }
]);
});
app.post('/api/users', (req, res) => {
const newUser = req.body;
res.status(201).json({ message: 'Erstellt', user: newUser });
});
app.listen(3000);
Async/Await
const fs = require('fs').promises;
// ❌ Sequenziell (langsam)
async function readSequential() {
const file1 = await fs.readFile('file1.txt');
const file2 = await fs.readFile('file2.txt');
// Gesamt: 200ms
}
// ✅ Parallel (schnell)
async function readParallel() {
const [file1, file2] = await Promise.all([
fs.readFile('file1.txt'),
fs.readFile('file2.txt')
]);
// Gesamt: 100ms (gleichzeitig)
}
Datenbank-Integration
const express = require('express');
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'password',
database: 'mydb'
});
app.get('/api/users', async (req, res) => {
try {
const [rows] = await pool.execute('SELECT * FROM users');
res.json(rows);
} catch (error) {
res.status(500).json({ error: 'Datenbankfehler' });
}
});
🤔 Häufig gestellte Fragen
F1. Warum ist Node.js schnell?
// Nicht-blockierende I/O
readFile('file.txt', (err, data) => {
processData(data);
});
// Kann andere Anfragen während des Lesens bearbeiten!
// Ereignisgesteuert
// Ein einzelner Thread verarbeitet Tausende von Verbindungen
// Kein Context-Switching-Overhead
F2. Was ist npm?
# Paketmanager für Node.js
npm install express # Paket installieren
npm init -y # Projekt initialisieren
npm list # Installierte Pakete auflisten
npm audit # Sicherheitsprüfung
# package.json
{
"dependencies": {
"express": "^4.18.0"
}
}
F3. CommonJS vs ES-Module?
// CommonJS (traditionell)
const { add } = require('./math');
module.exports = { add };
// ES-Module (modern)
import { add } from './math.js';
export function add(a, b) { return a + b; }
// In package.json aktivieren
{ "type": "module" }
🎬 Zusammenfassung
- Asynchrone I/O: Hohe Leistung und Skalierbarkeit
- JavaScript: Gleiche Sprache wie Frontend
- npm: Riesiges Paket-Ökosystem
- Event Loop: Effiziente gleichzeitige Verarbeitung
Werden Sie Full-Stack-Entwickler mit Node.js! 💚