Tworzenie za pomocą POST
Część sekcji API REST ścieżki Node.js w Coddy. Lekcja 2 z 25.
Klient dodający zadanie musi wiedzieć, gdzie znajduje się nowe zadanie. Wysyła nowy zasób pod adres URL listy za pomocą POST, a serwer odpowiada 201 Created, zwracając zasób i nagłówek Location zawierający jego adres URL.
POST /api/events { "name": "Launch party" }
201 Created
Location: /api/events/12
{ "id": 12, "name": "Launch party" }Serwer wybiera id, więc dwóch klientów nigdy nie może zgłosić tego samego. Dzięki nagłówkowi Location klient może pobrać nowe wydarzenie bez samodzielnego tworzenia adresu URL. res.location(path) ustawia ten nagłówek i można łączyć tę metodę z innymi, tak jak res.status:
res.status(201).location(`/api/events/${event.id}`).json(event);Wyzwanie
ŁatwyKlienci potrzebują sposobu dodawania zadań. Dodaj trasę POST, która tworzy zadanie i informuje klienta, gdzie można je znaleźć.
- W pliku
routes/tasks.jsdodaj trasę dlaPOST /api/tasks(wewnątrz routera ta ścieżka to'/'). Odczytuje onatitlez treści JSON, na przykład{ "title": "Order new chairs" }. - Utwórz nowe zadanie z czterema polami:
id: z funkcjinextId()w plikustore.js. Zaimportuj ją oboktasks.title: z treści żądania.done:false.createdAt:new Date().toISOString(), bieżący czas zapisany jako tekst.
Dodaj je do tablicy
tasks, aby było widoczne również w odpowiedzi naGET /api/tasks. - Odpowiedz statusem 201 i nowym zadaniem w formacie JSON. Ustaw nagłówek
Locationna adres URL samego zadania: dla zadania 4 jest to/api/tasks/4. Przy świeżym uruchomieniu treść odpowiedzi wygląda tak (wartośćcreatedAtbędzie odpowiadać chwili wysłania żądania):{ "id": 4, "title": "Order new chairs", "done": false, "createdAt": "2026-10-30T09:12:44.512Z" } - Jeśli w treści żądania nie ma pola
title, odpowiedz statusem 400 i zwróć{ "error": "title is required" }, nie dodając nic do listy.
Wypróbuj: wybierz POST, ścieżkę /api/tasks i treść { "title": "Order new chairs" }. Powinna pojawić się odpowiedź 201 i powyższe zadanie z id 4, a karta Headers odpowiedzi powinna pokazywać Location: /api/tasks/4. Wyślij GET /api/tasks/4: otrzymasz z powrotem to samo zadanie. Następnie wyślij POST z treścią {} do /api/tasks: otrzymasz odpowiedź 400 z błędem, a GET /api/tasks nadal będzie wyświetlać 4 zadania, ponieważ odrzucone żądanie POST niczego nie dodało.
Spróbuj swoich sił
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;
Wszystkie lekcje w sekcji API REST
1Zasoby i czasowniki
Zasoby i URL-eTworzenie za pomocą POST4Przeglądarki, wersje i konfiguracja
Czym jest originZezwalanie na dostęp z innego originCORSStrona wywołująca APIPoćwicz samodzielnie: Edytor online Express