Un unico formato di errore
Fa parte della sezione API REST del percorso Node.js di Coddy. Lezione 8 di 18.
Ora la tua API restituisce gli errori in due formati: una stringa per un 404 e l'oggetto di zod per un 400. Un client deve gestirli entrambi. Scegli un unico formato per ogni errore:
{ "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 serve ai programmi: non cambia mai, quindi un client può confrontarlo. message è per le persone e la sua formulazione può cambiare. fields indica a un modulo quale campo contrassegnare. Scrivi il formato in un'unica funzione e chiamala da ogni route, così nessuna route può discostarsene:
sendError(res, 404, 'not_found', 'Invoice not found');Sfida
Facile- Scrivi
sendErrorinerrors.js:{ "error": { "code", "message" } }con lo stato, piùfieldssolo quando è specificato. - Usalo per ogni 404 (codice
not_found),sendInvalidper ogni corpo non valido esendErrornel gestore degli errori diserver.js(invalid_json,server_error).
Invia DELETE /api/tasks/99, poi esegui POST con { "title": 123 }.
Provalo tu
import { z } from 'zod';
// Invia tutti gli errori in un unico formato:
// { "error": { "code": "not_found", "message": "Task not found" } }
// con "fields" aggiunto solo quando viene fornito.
export const sendError = (res, status, code, message, fields) => {
// Invia la risposta qui
};
// Un errore zod come 400: il primo problema come messaggio, i problemi di ogni campo
// in fields.
export const sendInvalid = (res, zodError) =>
sendError(res, 400, 'invalid_body', zodError.issues[0].message, z.flattenError(zodError).fieldErrors);
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.