Menu
CoddyTech

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');
challenge icon

Görev

Kolay
  • errors.js dosyasında sendError fonksiyonunu yaz: durum koduyla birlikte { "error": { "code", "message" } } döndür; yalnızca verilmişse fields ekle.
  • Tüm 404 hataları için kullan (not_found koduyla), geçersiz her istek gövdesi için sendInvalid kullan ve server.js içindeki hata işleyicide sendError kullan (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);
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

REST API'leri bölümündeki tüm dersler