Zum Hauptinhalt springen

💚 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! 💚