Learning
Zod

Gyakorlati példák

Login schema + API route validáció, termék request validáció, env validáció és külső API response ellenőrzés.

Login form + API route validáció

import { z } from "zod"

export const loginSchema = z.object({
  email: z.string({ required_error: "Az email cím megadása kötelező" }).email("Érvényes email cím szükséges"),
  password: z.string({ required_error: "A jelszó megadása kötelező" }).min(8, "Minimum 8 karakter szükséges"),
})

export type LoginInput = z.infer<typeof loginSchema>
export async function POST(request: Request) {
  const body = await request.json()
  const result = loginSchema.safeParse(body)

  if (!result.success) {
    return Response.json({ errors: result.error.flatten().fieldErrors }, { status: 400 })
  }

  const { email, password } = result.data
  return Response.json({ ok: true, email, password })
}

API request validáció

import { z } from "zod"

export const createProductSchema = z.object({
  name: z.string().min(1).max(200),
  price: z.number().positive("Az ár pozitív szám legyen"),
  currency: z.enum(["HUF", "EUR", "USD"]).default("HUF"),
  stock: z.number().int().nonnegative(),
  tags: z.array(z.string()).max(10, "Maximum 10 tag megengedett").optional(),
  publishedAt: z.string().datetime().optional(),
})

Environment változók validáció

import { z } from "zod"

const envSchema = z.object({
  DATABASE_URL: z.string().url(),
  JWT_SECRET: z.string().min(32, "A JWT secret legalább 32 karakter legyen"),
  PORT: z.coerce.number().default(3000),
  NODE_ENV: z.enum(["development", "test", "production"]).default("development"),
})

const env = envSchema.parse(process.env)

Külső API response validáció

import { z } from "zod"

const githubUserSchema = z.object({
  id: z.number(),
  login: z.string(),
  name: z.string().nullable(),
  email: z.string().email().nullable(),
  public_repos: z.number(),
  created_at: z.string().datetime(),
})

type GithubUser = z.infer<typeof githubUserSchema>

On this page