Tek Bir Hata Yapısı
Coddy'nin Node.js Journey'sinin REST API'leri bölümünün bir parçası. Ders 8 / 18.
API'niz artık hataları iki biçimde yanıtlıyor: 404 için bir dizge, 400 içinse zod'un nesnesi. Bir istemcinin her ikisini de işlemesi gerekir. Her hata için tek bir biçim seçin:
{ "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 programlar içindir: asla değişmez, bu yüzden bir istemci onu karşılaştırabilir. message insanlar içindir ve ifadesi değişebilir. fields, bir forma hangi girdiyi işaretleyeceğini söyler. Biçimi tek bir fonksiyonda tanımlayın ve her rotadan onu çağırın; böylece hiçbir rota farklılaşamaz:
sendError(res, 404, 'not_found', 'Invoice not found');Görev
Kolayerrors.jsdosyasındasendErrorfonksiyonunu yaz: durum koduyla birlikte{ "error": { "code", "message" } }döndür; yalnızca verilmişsefieldsekle.- Tüm 404 hataları için kullan (
not_foundkoduyla), geçersiz her istek gövdesi içinsendInvalidkullan veserver.jsiçindeki hata işleyicidesendErrorkullan (invalid_json,server_error).
DELETE /api/tasks/99 isteğini gönder, ardından { "title": 123 } ile POST isteği gönder.
Kendin dene
import { z } from 'zod';
// Her hatayı tek bir biçimde gönderir:
// { "error": { "code": "not_found", "message": "Task not found" } }
// "fields" yalnızca verildiğinde eklenir.
export const sendError = (res, status, code, message, fields) => {
// Yanıtı buradan gönder
};
// Bir zod hatasını 400 olarak gönderir: ilk sorununu mesaj olarak, her alanın
// sorunlarını fields içinde gönderir.
export const sendInvalid = (res, zodError) =>
sendError(res, 400, 'invalid_body', zodError.issues[0].message, z.flattenError(zodError).fieldErrors);
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.