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');Aufgabe
Einfach- Schreibe
sendErrorinerrors.js:{ "error": { "code", "message" } }mit dem Status sowiefieldsnur, wenn es angegeben wurde. - Verwende es für jeden 404-Fehler (Code
not_found),sendInvalidfür jeden ungültigen Request-Body undsendErrorim Fehlerhandler vonserver.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);
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.