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');Wyzwanie
Łatwy- Napisz
sendErrorwerrors.js:{ "error": { "code", "message" } }ze statusem orazfieldstylko wtedy, gdy podano tę wartość. - Używaj go dla każdego błędu 404 (kod
not_found),sendInvaliddla każdego nieprawidłowego body, asendErrorw obsłudze błędów w plikuserver.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);
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.