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');Défi
Facile- Écrivez
sendErrordanserrors.js:{ "error": { "code", "message" } }avec le statut, ainsi quefieldsuniquement lorsqu’il est fourni. - Utilisez-le pour chaque 404 (code
not_found),sendInvalidpour chaque corps de requête invalide, etsendErrordans le gestionnaire d’erreurs deserver.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);
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.