Menu
CoddyTech

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');
challenge icon

Sfida

Facile
  • Scrivi sendError in errors.js: { "error": { "code", "message" } } con lo stato, più fields solo quando è specificato.
  • Usalo per ogni 404 (codice not_found), sendInvalid per ogni corpo non valido e sendError nel gestore degli errori di server.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);
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di API REST