Express und Node: Webserver und APIs mit JavaScript
Kurz: Express ist ein schlankes Webframework für Node.js: Routen beantworten HTTP-Anfragen, Middleware verarbeitet Anfragen schrittweise (Logging, JSON, Authentifizierung, Fehler).
Genauer: Mit Node.js läuft JavaScript auf dem Server. Express (seit 2010) ist der Klassiker für APIs und Webseiten; moderne Alternativen: Fastify, Hono, NestJS, Next.js Route Handlers.
Im Detail
Erste API
import express from 'express';
const app = express();
app.use(express.json()); // JSON-Body lesen
const spiele = [{ id: 1, titel: 'Zelda' }];
app.get('/api/spiele', (req, res) => res.json(spiele));
app.get('/api/spiele/:id', (req, res) => {
const s = spiele.find(x => x.id === Number(req.params.id));
if (!s) return res.status(404).json({ fehler: 'nicht gefunden' });
res.json(s);
});
app.post('/api/spiele', (req, res) => {
const { titel } = req.body;
if (typeof titel !== 'string' || !titel.trim()) return res.status(400).json({ fehler: 'titel fehlt' });
const neu = { id: spiele.length + 1, titel: titel.trim() };
spiele.push(neu);
res.status(201).json(neu);
});
app.listen(3000, () => console.log('läuft auf :3000'));Start: node server.js ("type": "module" in package.json). Express 5 unterstützt async-Handler mit automatischer Fehlerweitergabe.
Middleware und Fehler
Middleware sind Funktionen (req, res, next) in einer Kette: Reihenfolge zählt.
app.use((req, res, next) => { console.log(req.method, req.url); next(); });
app.use('/api', authPruefung); // nur für /api
app.use((err, req, res, next) => { // Fehler-Middleware (4 Parameter)
console.error(err);
res.status(500).json({ fehler: 'Serverfehler' });
});Bewährte Pakete: helmet (Sicherheits-Header), cors, express-rate-limit, morgan/pino (Logging), zod (Validierung), cookie-parser/express-session, multer (Uploads).
Struktur und Datenbank
- Router (
express.Router()) pro Ressource, Controller/Service/Repository-Trennung. - Datenbank:
pg/Drizzle/Prisma/Sequelize; Parameterisierte Abfragen. - Konfiguration:
process.env(dotenv), nie Geheimnisse im Code. - Async/await + zentrale Fehlerbehandlung; Promises nicht unbehandelt lassen.
- Tests:
supertest+ Jest/Vitest/node:test. - Betrieb:
NODE_ENV=production, Prozessmanager (pm2) oder Docker, Reverse Proxy (Nginx) + HTTPS, Healthcheck, Logs. - Graceful Shutdown (SIGTERM).
Sicherheit und Einordnung
- Eingaben validieren (Typ, Länge), kein
eval, NoSQL-/SQL-Injection, XSS (nicht rohes HTML ausgeben), CSRF bei Cookie-Auth, CORS gezielt, Rate Limiting, Abhängigkeiten prüfen (npm audit). - Body-Größe begrenzen (
express.json({ limit: '100kb' })). - Fehler nicht mit Stacktrace an Clients senden.
- Vergleich: Express = minimal/viel Freiheit; Fastify schneller + Schemas; NestJS strukturiert (TypeScript, DI, Angular-Stil); Next.js vereint Frontend + API.
- Lernpfad: Node-Grundlagen → HTTP/REST → Express → Datenbank → Auth → Tests → Deployment.
Siehe auch: Node.js, REST-API-Design, Rate Limiting