Menu
CoddyTech

Une seule structure d’erreur

Fait partie de la section API REST du Journey Node.js de Coddy. Leçon 8 sur 18.

Votre API renvoie désormais les erreurs sous deux formes : une chaîne pour un 404 et un objet de zod pour un 400. Un client doit gérer chacune d’elles. Choisissez une seule forme pour toutes les erreurs :

{ "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 est destiné aux programmes : il ne change jamais, donc un client peut le comparer. message est destiné aux personnes, et sa formulation peut changer. fields indique à un formulaire quel champ marquer. Définissez la forme dans une seule fonction et appelez-la depuis chaque route, afin qu’aucune route ne puisse diverger :

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

Défi

Facile
  • Écrivez sendError dans errors.js : { "error": { "code", "message" } } avec le statut, ainsi que fields uniquement lorsqu’il est fourni.
  • Utilisez-le pour chaque 404 (code not_found), sendInvalid pour chaque corps de requête invalide, et sendError dans le gestionnaire d’erreurs de server.js (invalid_json, server_error).

Envoyez DELETE /api/tasks/99, puis une requête POST avec { "title": 123 }.

Essayez vous-même

import { z } from 'zod';

// Envoie toutes les erreurs sous une même forme :
// { "error": { "code": "not_found", "message": "Task not found" } }
// avec "fields" ajouté uniquement lorsqu’il est fourni.
export const sendError = (res, status, code, message, fields) => {
    // Envoyez la réponse ici
};

// Une erreur zod avec le code 400 : son premier problème comme message, les problèmes de chaque champ
// dans fields.
export const sendInvalid = (res, zodError) =>
    sendError(res, 400, 'invalid_body', zodError.issues[0].message, z.flattenError(zodError).fieldErrors);
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de API REST