0Pricing
TypeScript Academy · Ders

Hata ara yazılımı ve sonuç türleri

Merkezi bir hata işleyici ve türleri belirlenmiş Result kalıbı tasarlayın; hataları iletmek için async işleyicilerini sarın; tutarlı hata zarfları döndürün.

Hata ara yazılımı ve sonuç türleri, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 3 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 3 dersten oluşur.

Giriş

Amaç: Çalışma zamanı hatalarını merkezileştirmek ve tutarlı bir JSON “hata zarfı” döndürmek. Bir Sonuç türü, bir asenkron işleyici sarmalayıcısı ve sağlam bir hata ara yazılımı oluşturacaksınız.

  • Ayrımlı Result<T,E>
  • Asenkron işleyicilerden next(err)
  • Bilinmeyen→tür bilgisi belirtilmiş hata eşlemesi

Sonuç türü

İşlev sonuçları için ayrımlı birleşim kullanın: { ok: true; value } veya { ok: false; error }. Çağıranlar her iki dalı da ele almalıdır.

// Result pattern for services and controllers
export type Ok<T> = { ok: true; value: T }
export type Err<E> = { ok: false; error: E }
export type Result<T, E = string> = Ok<T> | Err<E>

export const ok = <T>(value: T): Ok<T> => ({ ok: true, value })
export const err = <E>(error: E): Err<E> => ({ ok: false, error })

// Example usage
async function getUserName(id: string): Promise<Result<string, "NOT_FOUND" | "DB">> {
  if (id === "missing") return err("NOT_FOUND")
  try { return ok("Ada") } catch { return err("DB") }
}

Hata zarfı

Bilinmeyen değerleri küçük ve öngörülebilir bir zarfa dönüştürün. Yığın izlerini istemcilere sızdırmaktan kaçının.

// Canonical error envelope
export type ErrorEnvelope = {
  error: string
  code?: string
  details?: unknown
}

export function mapError(u: unknown): ErrorEnvelope {
  if (u instanceof Error) return { error: u.message }
  if (typeof u === "string") return { error: u }
  try { return { error: JSON.stringify(u) } } catch { return { error: "Unknown error" } }
}

Asenkron sarmalayıcı ve ara yazılım

Herhangi bir asenkron işleyiciyi, reddedilmeleri next(err) çağrısına yönlendirecek şekilde sarın. Son hata ara yazılımı JSON'ı bir kez biçimlendirir.

import express, { Request, Response, NextFunction } from "express"

export const asyncHandler = <P, ResBody, ReqBody, Query>(fn: (req: Request<P, ResBody, ReqBody, Query>, res: Response<ResBody>, next: NextFunction) => Promise<unknown>) => {
  return (req: Request<P, ResBody, ReqBody, Query>, res: Response<ResBody>, next: NextFunction) => {
    Promise.resolve(fn(req, res, next)).catch(next)
  }
}

export function errorMiddleware(err: unknown, _req: Request, res: Response, _next: NextFunction) {
  const env = mapError(err)
  const status = env.code === "NOT_FOUND" ? 404 : 500
  res.status(status).json(env)
}

// Usage
// app.get("/", asyncHandler(async (req, res) => { throw new Error("boom") }))
// app.use(errorMiddleware)

Rotalar ve tümleştirme

Doğrulama ile hata yönetimini birleştirin: doğrulama ayrıntılarla birlikte 400 döndürür; diğer reddedilmeler merkezi ara yazılım tarafından yakalanır.

import express from "express"
import { z } from "zod"
import { asyncHandler, errorMiddleware } from "./errors"

const createUserSchema = z.object({ name: z.string().min(1) })

const app = express()
app.use(express.json())

app.post("/users", asyncHandler(async (req, res) => {
  const parsed = createUserSchema.safeParse(req.body)
  if (!parsed.success) {
    res.status(400).json({ error: "Invalid body", details: parsed.error.format() })
    return
  }
  res.status(201).json({ id: "u_1", name: parsed.data.name })
}))

app.use(errorMiddleware)

app.listen(3000, () => console.log("http://localhost:3000"))

İpuçları

İpuçları:

  • Sunucu tarafındaki ayrıntıları kaydedin; istemciye en az bilgiyi içeren iletiler döndürün.
  • Hizmetlerde türü belirtilmiş Sonuç kullanımını tercih edin ve HTTP'ye sınırda eşleyin.
  • Reddedilmeleri asla yutmayın—her zaman next(err) çağrısını yapın.

Asenkron hatalar kontrolü

Hızlı kontrol: Asenkron hataları doğru şekilde hangi yaklaşım iletirsiniz?

Özet

Özet: Alan mantığı için bir Sonuç birleşimi kullanın, asenkron işleyicileri next çağrısı yapacak şekilde sarın ve hataları son bir ara yazılımda bir kez biçimlendirin.

Sıkça Sorulan Sorular

“Hata ara yazılımı ve sonuç türleri” dersi ücretsiz mi?

Evet — “Hata ara yazılımı ve sonuç türleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 3 dersten oluşur.

“Hata ara yazılımı ve sonuç türleri” dersinde ne öğreneceğim?

Merkezi bir hata işleyici ve türleri belirlenmiş Result kalıbı tasarlayın; hataları iletmek için async işleyicilerini sarın; tutarlı hata zarfları döndürün. TypeScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te TypeScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 3. dersidir.

“Hata ara yazılımı ve sonuç türleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her TypeScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Yönlendirici işleyicileri, Request/Response türlerini belirleme
  2. zod ile şema doğrulama ve TS'ye çıkarım
  3. Hata ara yazılımı ve sonuç türleri
← TypeScript Academy Sayfasına Dön