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>