Saltar al contenido principal

DTOs y validaciones

Instalaciones

  • Zod Validator Middleware y Zod
bun add @hono/zod-validator zod

npm i @hono/zod-validator zod

DTO y Middleware

src\units\units.dto.ts
import { zValidator } from "@hono/zod-validator";
import { z } from "zod";

export const createUserDto = z.object({
  displayOrder: z.number(),
  title: z.string().max(100),
  imageSrc: z.string().optional(),
});

// Para usar en el middleware de validación
// "form" | "query" | "params" | "json", etc.
export const createUserValidator = zValidator("json", createUserDto);

Uso

  1. Aplicar Middleware
  2. Extraer datos para utilizar
src\units\index.ts
unitsApp.post("/", createUserValidator, async (c) => {
  // "json" o lo definido en el middleware
  const { displayOrder, title, imageSrc } = c.req.valid("json");
 
  const db = drizzle(c.env.DB);
  await db.insert(units).values({ displayOrder, title, imageSrc });
  return c.json({ message: "Created" }, 201);
});

export default unitsApp;
  • Sin crear export const createUserValidator entonces se escribe directamente
src\users\index.ts
// "form", "json", "params", etc.
userApp.post("/", zValidator("form", userSchema), async (c) => {}
  • Sin Zod, pero no ofrece tipado o mensajes de error
src\users\index.ts
userApp.post("/", zUserValidator, async (c) => {
 
  //const body = await c.req.parseBody(); // form-data, x-www-form-urlencoded
  const { name, email } = c.req.valid("json");
 
  return c.json(body);
});