LU16b – UPDATE (PUT) & DELETE (DELETE) mit Express und Postman

  • Sie können einen bestehenden Post über PUT /api/posts/:id aktualisieren (Update).
  • Sie können einen bestehenden Post über DELETE /api/posts/:id löschen (Delete).
  • Sie wissen, wie Sie req.params.id (Route-Parameter) und req.body (Body-Daten) verwenden.
  • Sie verwenden passende HTTP-Statuscodes (200, 400, 404).
  • Sie können die Endpoints mit Postman testen.

Damit PUT und DELETE funktionieren, muss in Ihrem index.js weiterhin Folgendes vorhanden sein:

  • app.use(express.json()); (damit JSON aus dem Request-Body in req.body landet)
  • das Array posts mit Beispiel-Daten
  • die bereits erstellten Routes GET /api/posts, GET /api/posts/:id und POST /api/posts

Fügen Sie die folgenden Routen unterhalb Ihrer bisherigen Routen in index.js ein (die Reihenfolge ist nicht entscheidend, aber Übersicht hilft).

UPDATE – Post aktualisieren (PUT /api/posts/:id)

Mit PUT aktualisieren Sie einen bestehenden Datensatz. Der Client schickt dazu einen Request an:

  • /api/posts/:idid ist die post_id des Posts, der geändert werden soll.
  • Die neuen Werte werden als JSON im Request-Body mitgeschickt.
// UPDATE – vorhandenen Post aktualisieren
app.put('/api/posts/:id', (req, res) => {
  const id = Number(req.params.id);
 
  // Post suchen nach der ID aus dem Request im posts-Array (Liste)
  const post = posts.find(p => p.post_id === id);
 
  if (!post) {
    return res.status(404).send('Post nicht gefunden');
  }
 
  // Neue Werte aus dem Body lesen
  const userId = req.body.user_id;
  const title = req.body.title;
  const imageUrl = req.body.image_url;
  const description = req.body.description;
  const likes = req.body.likes;
 
  // Validierung: mindestens ein Feld muss vorhanden sein
  if (
    userId === undefined &&
    title === undefined &&
    imageUrl === undefined &&
    description === undefined &&
    likes === undefined
  ) {
    return res.status(400).send('Bitte mindestens ein Feld zum Aktualisieren mitsenden.');
  }
 
  // Update nur für Felder, die wirklich geschickt wurden
  if (userId !== undefined) {
    post.user_id = userId;
  }
  if (title !== undefined) {
    post.title = title;
  }
  if (imageUrl !== undefined) {
    post.image_url = imageUrl;
  }
  if (description !== undefined) {
    post.description = description;
  }
  if (likes !== undefined) {
    post.likes = likes;
  }
 
  // Antwort: 200 OK + aktualisiertes Objekt
  res.status(200).json(post);
});

 Screenshot: einen Post abändern.

  1. Methode: PUT
  2. Tab BodyrawJSON
  3. Beispiel-Body:
{
  "title": "Sunset Vibes (updated)",
  "likes": 99
}

Erwartung:

  • Status 200 OK
  • JSON-Objekt des aktualisierten Posts (post_id: 2) mit neuem title und likes
  • Danach GET /api/posts/2 testen → Änderungen sollten sichtbar sein

DELETE – Post löschen (DELETE /api/posts/:id)

Mit DELETE entfernen Sie einen Datensatz. Der Client schickt dazu einen Request an:

  • DELETE /api/posts/:id

Der Server sucht den passenden Post und entfernt ihn aus der Liste.

// DELETE – Post löschen
app.delete('/api/posts/:id', (req, res) => {
  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('Post nicht gefunden');
  }
 
  // Löschen: splice gibt ein Array zurück -> [0] ist das gelöschte Objekt
  const deletedPost = posts.splice(index, 1)[0];
 
  // Antwort: 200 OK + gelöschter Post (zur Kontrolle)
  res.status(200).json(deletedPost);
});

 Screenshot: einen Post aus der Liste löschen.

  1. Methode: DELETE

Erwartung:

  • Status 200 OK
  • JSON-Objekt des gelöschten Posts

Danach:

  • GET /api/posts → der gelöschte Post sollte nicht mehr in der Liste sein
  • GET /api/posts/1 → sollte 404 Not Found liefern
  • req.params.id ist immer ein String → mit Number(…) oder parseInt(…) umwandeln.
  • Bei PUT vergessen viele, den Request-Body als JSON zu senden → in Postman unbedingt raw + JSON wählen.
  • Bei PUT und DELETE immer prüfen: existiert das Objekt? → sonst 404 zurückgeben.
  • Bei PUT: wenn keine Felder im Body sind → 400 zurückgeben (sonst „Update ohne Update“).

Sie können jetzt CRUD auf API-Ebene komplett:

  • Create → POST /api/posts
  • Read → GET /api/posts und GET /api/posts/:id
  • Update → PUT /api/posts/:id
  • Delete → DELETE /api/posts/:id

In der nächsten Unterrichtseinheit ersetzen wir die lokale Liste posts durch eine echte MySQL-Tabelle und führen dieselben Operationen über SQL aus.

  • modul/m290_guko/learningunits/lu16/theorie/b_update_delete.txt
  • Zuletzt geändert: 2025/12/18 13:46
  • von gkoch