create-new-express-app
Version:
A CLI tool to create a TypeScript Express application with best practices
33 lines (30 loc) • 980 B
text/typescript
import { type Request, type Response, type NextFunction } from "express";
import { type z, ZodError } from "zod";
import { ValidationException } from "@/exceptions";
type ValidationSchemas = {
body?: z.ZodType<Record<string, unknown>>;
query?: z.ZodType<Record<string, unknown>>;
params?: z.ZodType<Record<string, unknown>>;
};
export function validateData(schemas: ValidationSchemas) {
return (req: Request, res: Response, next: NextFunction) => {
try {
if (schemas.body) {
req.body = schemas.body.parse(req.body);
}
if (schemas.params) {
req.params = schemas.params.parse(req.params);
}
if (schemas.query) {
req.query = schemas.query.parse(req.query) as typeof req.query;
}
next();
} catch (error) {
if (error instanceof ZodError) {
next(new ValidationException(error));
} else {
next(error instanceof Error ? error : new Error(String(error)));
}
}
};
}