Menu
CoddyTech

Um único formato de erro

Parte da seção APIs REST do Journey de Node.js da Coddy. Lição 8 de 18.

Sua API agora responde aos erros em dois formatos: uma string para 404 e o objeto do zod para 400. Um cliente precisa tratar cada um deles. Escolha um único formato para todos os erros:

{ "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 é para programas: nunca muda, então um cliente pode compará-lo. message é para pessoas, e seu texto pode mudar. fields informa a um formulário qual campo de entrada deve ser marcado. Defina o formato em uma única função e chame-a em todas as rotas, para que nenhuma rota fique diferente das outras:

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

Desafio

Fácil
  • Escreva sendError em errors.js: { "error": { "code", "message" } } com o status e fields somente quando fornecido.
  • Use-o para cada 404 (código not_found), sendInvalid para cada corpo inválido e sendError no manipulador de erros de server.js (invalid_json, server_error).

Envie DELETE /api/tasks/99 e, em seguida, faça um POST com { "title": 123 }.

Experimente você mesmo

import { z } from 'zod';

// Envia todos os erros no mesmo formato:
// { "error": { "code": "not_found", "message": "Task not found" } }
// com "fields" adicionado apenas quando fornecido.
export const sendError = (res, status, code, message, fields) => {
    // Envie a resposta aqui
};

// Um erro do zod como 400: o primeiro problema como mensagem, os problemas de cada campo
// em fields.
export const sendInvalid = (res, zodError) =>
    sendError(res, 400, 'invalid_body', zodError.issues[0].message, z.flattenError(zodError).fieldErrors);
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de APIs REST