ZZuro Docs

Validator

Simple request validation with Zod

Validator

Add a simple validation middleware for body, query, and params.


Installation

npx zuro-cli add validator
pnpm dlx zuro-cli add validator
bun x zuro-cli add validator

What Gets Added

validate.ts

Runtime dependency installed:

  • zod

Middleware API

validate(schema)

Your schema should validate this shape:

{
  body?: unknown;
  query?: unknown;
  params?: unknown;
}

Behavior

  1. Validates request input with Zod.
  2. Writes parsed values back to req.body, req.query, and req.params.
  3. Returns 422 on validation errors:
{
  "status": "error",
  "code": "VALIDATION_ERROR",
  "message": "Validation failed",
  "errors": [
    { "path": "body.email", "message": "Invalid email" }
  ]
}
  1. Passes non-Zod errors to next(error).

Basic Usage

import { Router } from "express";
import { z } from "zod";
import { validate } from "./middleware/validate";

const router = Router();

const createUserSchema = z.object({
  body: z.object({
    name: z.string().min(2),
    email: z.string().email(),
  }),
});

router.post("/users", validate(createUserSchema), (req, res) => {
  const { name, email } = req.body;
  res.json({ name, email });
});

Query + Params Example

const listPostsSchema = z.object({
  query: z.object({
    page: z.coerce.number().min(1).default(1),
    limit: z.coerce.number().min(1).max(100).default(20),
  }),
  params: z.object({
    userId: z.string().uuid(),
  }),
});

router.get("/users/:userId/posts", validate(listPostsSchema), (req, res) => {
  const { page, limit } = req.query;
  const { userId } = req.params;
  res.json({ page, limit, userId });
});

Works with Error Handler

Validator returns validation responses directly by default.

If anything else throws, it still goes to your error middleware:

npx zuro-cli add error-handler

Next Steps

On this page