Demoprojekt - Produktverwaltung (CRUD) mit Express
Auf dieser Seite erstellen Sie ein komplettes kleines Backend für die Verwaltung von Produkten, ganz ohne Datenbank. Die Produktdaten werden einfach in einem Array im laufenden Server gespeichert. Sie lernen dabei die grundlegenden CRUD-Operationen (Create, Read, Update, Delete) mit Express kennen.
Schritt 1: Projektordner anlegen und vorbereiten
Abschnitt betitelt „Schritt 1: Projektordner anlegen und vorbereiten“Öffnen Sie Ihr Terminal und geben Sie nacheinander folgende Befehle ein:
mkdir produktverwaltung-backendcd produktverwaltung-backendnpm initBeantworten Sie die Fragen von npm init – oder drücken Sie zur Not einfach jeweils Enter für die Standardwerte.
Schritt 2: Express installieren und ES Modules aktivieren
Abschnitt betitelt „Schritt 2: Express installieren und ES Modules aktivieren“Installieren Sie das Framework Express.js mit:
npm install expressÖffnen Sie die Datei package.json und ergänzen Sie im Hauptteil:
"type": "module",So können Sie moderne import- und export-Befehle nutzen.
Schritt 3: Die Datei server.js anlegen
Abschnitt betitelt „Schritt 3: Die Datei server.js anlegen“Legen Sie im Projektordner eine Datei namens server.js an und öffnen Sie diese im Editor.
Schritt 4: Die Express-App und das Produkt-Array aufbauen
Abschnitt betitelt „Schritt 4: Die Express-App und das Produkt-Array aufbauen“Fügen Sie zu Beginn folgenden Code in server.js ein:
import express from 'express';
const app = express();const port = 3000;
// Body-Parsing für JSON-Anfragen aktivierenapp.use(express.json());
// Beispiel-Array als "Datenbank"let products = [];
// Beispiel-User-ID für createdBy (da keine Nutzerverwaltung)const demoUserId = 'user123';Schritt 5: Die Felder der Produkte erklären
Abschnitt betitelt „Schritt 5: Die Felder der Produkte erklären“Unsere Produkte enthalten folgende Eigenschaften:
- title (String, erforderlich): Name des Produkts
- description (String, optional): Beschreibung
- active (Boolean, Standard: true): Ob das Produkt aktiv ist
- price (Number, erforderlich): Preis
- createdBy (String, erforderlich): ID des Benutzers, der das Produkt angelegt hat
Schritt 6: Routen für die Produktverwaltung (CRUD)
Abschnitt betitelt „Schritt 6: Routen für die Produktverwaltung (CRUD)“a) Neues Produkt anlegen (Create)
Abschnitt betitelt „a) Neues Produkt anlegen (Create)“app.post('/products', (req, res) => { const { title, description, active = true, price } = req.body; if (!title || price === undefined) { return res.status(400).json({ error: 'Titel und Preis sind erforderlich.' }); } const newProduct = { id: Date.now().toString(), title, description, active, price, createdBy: demoUserId }; products.push(newProduct); res.status(201).json(newProduct);});b) Alle Produkte abrufen (Read)
Abschnitt betitelt „b) Alle Produkte abrufen (Read)“app.get('/products', (req, res) => { res.json(products);});c) Ein Produkt abrufen (Read)
Abschnitt betitelt „c) Ein Produkt abrufen (Read)“app.get('/products/:id', (req, res) => { const product = products.find(p => p.id === req.params.id); if (!product) { return res.status(404).json({ error: 'Produkt nicht gefunden.' }); } res.json(product);});d) Produkt aktualisieren (Update)
Abschnitt betitelt „d) Produkt aktualisieren (Update)“app.put('/products/:id', (req, res) => { const product = products.find(p => p.id === req.params.id); if (!product) { return res.status(404).json({ error: 'Produkt nicht gefunden.' }); } const { title, description, active, price } = req.body; if (title !== undefined) product.title = title; if (description !== undefined) product.description = description; if (active !== undefined) product.active = active; if (price !== undefined) product.price = price; res.json(product);});e) Produkt löschen (Delete)
Abschnitt betitelt „e) Produkt löschen (Delete)“app.delete('/products/:id', (req, res) => { const index = products.findIndex(p => p.id === req.params.id); if (index === -1) { return res.status(404).json({ error: 'Produkt nicht gefunden.' }); } const deleted = products.splice(index, 1); res.json({ message: 'Produkt gelöscht.', product: deleted[0] });});Schritt 7: Server starten
Abschnitt betitelt „Schritt 7: Server starten“Am Ende Ihrer Datei fügen Sie ein:
app.listen(port, () => { console.log(`Server läuft unter http://localhost:${port}`);});Schritt 8: Testen
Abschnitt betitelt „Schritt 8: Testen“Starten Sie Ihr Backend im Terminal:
node server.js- Senden Sie Anfragen an die verschiedenen Endpunkte mit Tools wie Postman, Thunder Client (VS Code Extension) oder auch per
curl. - Beispiel:
- GET http://localhost:3000/products
- POST http://localhost:3000/products (mit JSON-Body)
- PUT, DELETE wie oben beschrieben
Schritt 9: Hinweis zu Arrays statt Datenbank
Abschnitt betitelt „Schritt 9: Hinweis zu Arrays statt Datenbank“In diesem Demoprojekt werden die Produkte nur im Speicher gehalten. Wenn Sie den Server neu starten, sind alle Daten weg. Für erste Experimente reicht das völlig aus – später können Sie MySQL, MongoDB oder eine andere Datenbank anbinden.