Menu
CoddyTech

Ein einheitliches Fehlerformat

Teil des Abschnitts REST-APIs der Node.js-Journey von Coddy. Lektion 8 von 18.

Deine API gibt Fehler jetzt in zwei Formen zurück: als Zeichenfolge für einen 404-Fehler und als Objekt von zod für einen 400-Fehler. Ein Client muss beide verarbeiten. Wähle für jeden Fehler dieselbe Form:

{ "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 ist für Programme gedacht: Es ändert sich nie, sodass ein Client es vergleichen kann. message ist für Menschen gedacht, und sein Wortlaut kann sich ändern. fields teilt einem Formular mit, welche Eingabe markiert werden soll. Schreibe die Form in eine Funktion und rufe sie von jeder Route aus auf, damit keine Route davon abweichen kann:

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

Aufgabe

Einfach
  • Schreibe sendError in errors.js: { "error": { "code", "message" } } mit dem Status sowie fields nur, wenn es angegeben wurde.
  • Verwende es für jeden 404-Fehler (Code not_found), sendInvalid für jeden ungültigen Request-Body und sendError im Fehlerhandler von server.js (invalid_json, server_error).

Sende DELETE /api/tasks/99 und anschließend einen POST-Request mit { "title": 123 }.

Probier es selbst

import { z } from 'zod';

// Sendet jeden Fehler im gleichen Format:
// { "error": { "code": "not_found", "message": "Task not found" } }
// wobei "fields" nur hinzugefügt wird, wenn es angegeben ist.
export const sendError = (res, status, code, message, fields) => {
    // Sende die Antwort hier
};

// Ein zod-Fehler als 400: das erste Problem als Nachricht, die Probleme jedes Feldes
// in fields.
export const sendInvalid = (res, zodError) =>
    sendError(res, 400, 'invalid_body', zodError.issues[0].message, z.flattenError(zodError).fieldErrors);
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in REST-APIs