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
- Aplicar Middleware
- 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 createUserValidatorentonces 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);
});