Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| modul:m290_guko:learningunits:lu16:theorie:b_update_delete [2025/12/18 13:15] – gkoch | modul:m290_guko:learningunits:lu16:theorie:b_update_delete [2026/01/02 23:06] (aktuell) – gkoch | ||
|---|---|---|---|
| Zeile 9: | Zeile 9: | ||
| * Sie können die Endpoints mit **Postman** testen. | * Sie können die Endpoints mit **Postman** testen. | ||
| - | <WRAP center round info 80%> | ||
| - | Diese Learning Unit baut auf Ihrer LU16-Seite auf. Sie verwenden weiterhin das gleiche '' | ||
| - | </ | ||
| Zeile 46: | Zeile 43: | ||
| const id = Number(req.params.id); | const id = Number(req.params.id); | ||
| - | // Post suchen | + | // Post suchen |
| const post = posts.find(p => p.post_id === id); | const post = posts.find(p => p.post_id === id); | ||
| Zeile 53: | Zeile 50: | ||
| } | } | ||
| - | // Neue Werte aus dem Body lesen | + | // Alle Felder werden erwartet (PUT ersetzt alles) |
| - | const userId | + | const user_id |
| const title = req.body.title; | const title = req.body.title; | ||
| - | const imageUrl | + | const image_url |
| const description = req.body.description; | const description = req.body.description; | ||
| const likes = req.body.likes; | const likes = req.body.likes; | ||
| - | // Validierung: | + | // Validierung: |
| + | // likes kann 0 sein -> deshalb auf undefined prüfen | ||
| if ( | if ( | ||
| - | | + | |
| - | title === undefined | + | title === undefined |
| - | | + | |
| + | description === undefined || | ||
| + | likes === undefined | ||
| + | ) { | ||
| + | return res.status(400).send(' | ||
| + | } | ||
| + | |||
| + | // Post überschreiben | ||
| + | post.user_id = user_id; | ||
| + | post.title = title; | ||
| + | post.image_url = image_url; | ||
| + | post.description = description; | ||
| + | post.likes = likes; | ||
| + | |||
| + | |||
| + | // Antwort: 200 OK + aktualisiertes Objekt | ||
| + | res.status(200).json(post); | ||
| + | }); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Test mit Postman (PUT) ==== | ||
| + | |||
| + | {{: | ||
| + | |||
| + | - Methode: '' | ||
| + | - URL: '' | ||
| + | - Tab '' | ||
| + | - Beispiel-Body: | ||
| + | |||
| + | <WRAP box round center 80%> | ||
| + | <code json> | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Erwartung: | ||
| + | |||
| + | * Status '' | ||
| + | * JSON-Objekt des aktualisierten Posts ('' | ||
| + | * Danach '' | ||
| + | |||
| + | |||
| + | ===== DELETE – Post löschen (DELETE / | ||
| + | |||
| + | ==== Was bedeutet DELETE? ==== | ||
| + | |||
| + | Mit '' | ||
| + | Der Client schickt dazu einen Request an: | ||
| + | |||
| + | * '' | ||
| + | |||
| + | Der Server sucht den passenden Post und entfernt ihn aus der Liste. | ||
| + | |||
| + | ==== Code: DELETE-Route ==== | ||
| + | |||
| + | <WRAP box round center 80%> | ||
| + | <code javascript> | ||
| + | // DELETE – Post löschen | ||
| + | app.delete('/ | ||
| + | const id = Number(req.params.id); | ||
| + | |||
| + | // Index suchen (praktisch fürs Löschen) | ||
| + | const index = posts.findIndex(p => p.post_id === id); | ||
| + | |||
| + | if (index === -1) { | ||
| + | return res.status(404).send(' | ||
| + | } | ||
| + | |||
| + | // Löschen: splice gibt ein Array zurück -> [0] ist das gelöschte Objekt | ||
| + | const deletedPost = posts.splice(index, | ||
| + | |||
| + | // Antwort: 200 OK + gelöschter Post (zur Kontrolle) | ||
| + | res.status(200).json(deletedPost); | ||
| + | }); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Test mit Postman (DELETE) ==== | ||
| + | |||
| + | {{: | ||
| + | |||
| + | - Methode: '' | ||
| + | - URL: '' | ||
| + | |||
| + | Erwartung: | ||
| + | |||
| + | * Status '' | ||
| + | * JSON-Objekt des gelöschten Posts | ||
| + | |||
| + | Danach: | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | |||
| + | ===== Typische Fehlerquellen ===== | ||
| + | |||
| + | * '' | ||
| + | * Bei '' | ||
| + | * Bei '' | ||
| + | * Bei '' | ||
| + | |||
| + | |||
| + | ===== Ausblick ===== | ||
| + | |||
| + | Sie können jetzt CRUD auf API-Ebene komplett: | ||
| + | |||
| + | * Create → '' | ||
| + | * Read → '' | ||
| + | * Update → '' | ||
| + | * Delete → '' | ||
| + | |||
| + | In der nächsten Unterrichtseinheit ersetzen wir die lokale Liste '' | ||