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);Aufgabe
EinfachClients 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.
- Füge in
routes/tasks.jseine Route fürPOST /api/taskshinzu (innerhalb des Routers lautet dieser Pfad'/'). Sie liesttitleaus dem JSON-Body, zum Beispiel{ "title": "Order new chairs" }. - Erstelle die neue Aufgabe mit vier Feldern:
id: aus der FunktionnextId()instore.js. Importiere sie nebentasks.title: aus dem Body.done:false.createdAt:new Date().toISOString(), die aktuelle Uhrzeit als Text.
Füge sie zum Array
taskshinzu, damit sie auch inGET /api/tasksangezeigt wird. - 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 (deincreatedAtentspricht dem Zeitpunkt, zu dem du die Antwort sendest):{ "id": 4, "title": "Order new chairs", "done": false, "createdAt": "2026-10-30T09:12:44.512Z" } - Wenn der Body kein
titleenthä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
1Ressourcen und Verben
Ressourcen und URLsErstellen mit POST4Browser, Versionen und Konfiguration
Was ist ein Origin?Einen anderen Origin zulassenCORSEine Seite, die die API aufruftÜbe selbstständig: Express-Playground