Validator
Simple request validation with Zod
Validator
Add a simple validation middleware for body, query, and params.
Installation
npx zuro-cli add validatorpnpm dlx zuro-cli add validatorbun x zuro-cli add validatorWhat 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
- Validates request input with Zod.
- Writes parsed values back to
req.body,req.query, andreq.params. - Returns
422on validation errors:
{
"status": "error",
"code": "VALIDATION_ERROR",
"message": "Validation failed",
"errors": [
{ "path": "body.email", "message": "Invalid email" }
]
}- 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