Menu
CoddyTech

Częściowe aktualizacje za pomocą PATCH

Część sekcji API REST ścieżki Node.js w Coddy. Lekcja 3 z 18.

Oznaczenie zadania jako wykonanego nie powinno oznaczać ponownego wysyłania jego tytułu. PATCH przesyła tylko zmieniane pola, a serwer zachowuje wszystkie pozostałe pola bez zmian.

// PATCH /api/invoices/7   { "paid": true }
const { paid, amount } = req.body ?? {};
if (paid !== undefined) invoice.paid = paid;
if (amount !== undefined) invoice.amount = amount;
res.json(invoice);

Sprawdzaj każde pole pod kątem wartości undefined, a nie za pomocą if (paid): false to wartość, którą klient może wysłać. Kopiuj pola pojedynczo zamiast łączyć req.body z obiektem, aby klient nie mógł zmienić id. Żądanie bez treści pozostawia req.body jako undefined — właśnie to obsługuje ?? {}. Odpowiedzią jest kod 200 z całą zaktualizowaną fakturą.

challenge icon

Wyzwanie

Łatwy
  • PATCH /api/tasks/:id zmienia tylko pola przesłane w treści żądania: title lub done.
  • Zwraca kod 200 i całe zadanie.
  • Nieznane id zwraca kod 404 i { "error": "Task not found" }.

Wyślij PATCH /api/tasks/2 z { "done": true }, następnie GET /api/tasks/2, a potem ten sam PATCH do /api/tasks/99.

Spróbuj swoich sił

import { Router } from 'express';
import { nextId, 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);
});

router.post('/', (req, res) => {
    const { title } = req.body ?? {};
    if (!title) {
        return res.status(400).json({ error: 'title is required' });
    }
    const task = { id: nextId(), title, done: false, createdAt: new Date().toISOString() };
    tasks.push(task);
    res.status(201).location(`/api/tasks/${task.id}`).json(task);
});

export default router;
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji API REST