Menu
CoddyTech

Jeden format błędu

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

Twoje API zwraca teraz błędy w dwóch formatach: ciąg znaków dla błędu 404 i obiekt zod dla błędu 400. Klient musi obsłużyć każdy z nich. Wybierz jeden format dla każdego błędu:

{ "error": { "code": "not_found", "message": "Invoice not found" } }

{ "error": { "code": "invalid_body", "message": "Too small: ...",
             "fields": { "amount": ["Too small: expected number to be >0"] } } }

code jest przeznaczone dla programów: nigdy się nie zmienia, więc klient może je porównać. message jest przeznaczone dla ludzi, a jego brzmienie może się zmieniać. fields informuje formularz, które pole należy oznaczyć. Zapisz format w jednej funkcji i wywołuj ją z każdej trasy, aby format był spójny we wszystkich trasach:

sendError(res, 404, 'not_found', 'Invoice not found');
challenge icon

Wyzwanie

Łatwy
  • Napisz sendError w errors.js: { "error": { "code", "message" } } ze statusem oraz fields tylko wtedy, gdy podano tę wartość.
  • Używaj go dla każdego błędu 404 (kod not_found), sendInvalid dla każdego nieprawidłowego body, a sendError w obsłudze błędów w pliku server.js (invalid_json, server_error).

Wyślij DELETE /api/tasks/99, a następnie POST z { "title": 123 }.

Spróbuj swoich sił

import { z } from 'zod';

// Wysyła każdy błąd w jednolitym formacie:
// { "error": { "code": "not_found", "message": "Task not found" } }
// z "fields" dodawanym tylko wtedy, gdy zostało podane.
export const sendError = (res, status, code, message, fields) => {
    // Wyślij odpowiedź tutaj
};

// Błąd zod jako 400: pierwszy problem jako komunikat, a problemy poszczególnych pól
// w fields.
export const sendInvalid = (res, zodError) =>
    sendError(res, 400, 'invalid_body', zodError.issues[0].message, z.flattenError(zodError).fieldErrors);
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