Menu
CoddyTech

Erstellen mit POST

Teil des Abschnitts REST-APIs der Node.js-Journey von Coddy. Lektion 2 von 25.

Ein Client, der eine Aufgabe hinzufügt, muss wissen, wo die neue Aufgabe gespeichert wird. Er sendet die neue Ressource mit POST an die URL der Liste, und der Server antwortet mit 201 Created, der Ressource und einem Location-Header, der ihre URL angibt.

POST /api/events   { "name": "Launch party" }

201 Created
Location: /api/events/12
{ "id": 12, "name": "Launch party" }

Der Server wählt die id aus, sodass zwei Clients niemals dieselbe beanspruchen können. Mit dem Location-Header kann der Client das neue Ereignis abrufen, ohne die URL selbst zusammenzustellen. res.location(path) setzt diesen Header und lässt sich wie res.status verketten:

res.status(201).location(`/api/events/${event.id}`).json(event);
challenge icon

Aufgabe

Einfach

Clients benötigen eine Möglichkeit, Aufgaben hinzuzufügen. Füge eine POST-Route hinzu, die eine Aufgabe erstellt und dem Client mitteilt, wo die neue Aufgabe zu finden ist.

  1. Füge in routes/tasks.js eine Route für POST /api/tasks hinzu (innerhalb des Routers lautet dieser Pfad '/'). Sie liest title aus dem JSON-Body, zum Beispiel { "title": "Order new chairs" }.
  2. Erstelle die neue Aufgabe mit vier Feldern:
    • id: aus der Funktion nextId() in store.js. Importiere sie neben tasks.
    • title: aus dem Body.
    • done: false.
    • createdAt: new Date().toISOString(), die aktuelle Uhrzeit als Text.

    Füge sie zum Array tasks hinzu, damit sie auch in GET /api/tasks angezeigt wird.

  3. Antworte mit Status 201 und der neuen Aufgabe als JSON. Setze den Location-Header auf die URL der Aufgabe: Für Aufgabe 4 lautet sie /api/tasks/4. Bei einem neuen Start sieht der Antwort-Body so aus (dein createdAt entspricht dem Zeitpunkt, zu dem du die Antwort sendest):
    { "id": 4, "title": "Order new chairs", "done": false, "createdAt": "2026-10-30T09:12:44.512Z" }
  4. Wenn der Body kein title enthält, antworte mit Status 400 und { "error": "title is required" } und füge der Liste nichts hinzu.

Probiere es aus: Wähle POST, den Pfad /api/tasks und den Body { "title": "Order new chairs" }. Du solltest 201 und die obige Aufgabe mit der ID 4 sehen. Im Tab „Headers“ der Antwort wird Location: /api/tasks/4 angezeigt. Sende GET /api/tasks/4: Du erhältst dieselbe Aufgabe zurück. Sende dann {} per POST an /api/tasks: Du erhältst 400 mit dem Fehler, und GET /api/tasks führt weiterhin 4 Aufgaben auf, weil der abgewiesene POST nichts hinzugefügt hat.

Probier es selbst

import { Router } from 'express';
import { tasks } from '../store.js';

const router = Router();

router.get('/', (req, res) => {
    res.json(tasks);
});

router.get('/:id', (req, res) => {
    const task = tasks.find((t) => t.id === Number(req.params.id));
    if (!task) {
        return res.status(404).json({ error: 'Task not found' });
    }
    res.json(task);
});

export default router;

Alle Lektionen in REST-APIs

Übe selbstständig: Express-Playground