Middleware validator using zod schema

This commit is contained in:
Justin xzHome
2025-07-08 23:21:19 +09:00
parent 4f35ed1abd
commit b35d8f76df
4 changed files with 22 additions and 10 deletions

View File

@@ -1,19 +1,22 @@
import { Request, Response, NextFunction } from 'express';
import { z, ZodError } from 'zod';
import { z, ZodError, ZodTypeAny } from 'zod';
import { ZodObject } from 'zod/v4';
export function validateData(schema: z.ZodObject<any, any>) {
export function validateData(schema: ZodObject) {
return (req: Request, res: Response, next: NextFunction) => {
try {
schema.parse(req.body);
next();
} catch (error) {
// console.log(error);
if (error instanceof ZodError) {
const errorMessages = error.errors.map((issue: any) => ({
message: `${issue.path.join('.')} is ${issue.message}`,
}));
res.status(400).json({ error: 'Invalid data', details: errorMessages });
} else {
res.status(500).json({ error: 'Internal Server Error' });
const er = error as ZodError
res.status(400).json({ error: er.flatten()});
}
}
};

View File

@@ -6,17 +6,18 @@ import { listProducts,
deleteProduct
} from "./productsController";
import { validateData } from "../../middlewares/validationMiddleware";
import { z } from 'zod';
import { z, ZodObject, ZodTypeAny } from 'zod/v4';
import { createInsertSchema , createSelectSchema, createUpdateSchema } from 'drizzle-zod';
import { productsTable } from "../../db/productsSchema";
const createProductSchema = z.object({
name: z.string(),
price: z.number({ message: "not a number you idiot."}),
});
// const createProductSchema = z.object({
// name: z.string(),
// price: z.number({ message: "not a number you idiot."}),
// });
// const createProductSchema = createInsertSchema(productsTable);
// type ProductType = z.infer<typeof createProductSchema>;
const createProductSchema = createInsertSchema(productsTable).omit({id: true});
type ProductType = z.infer<typeof createProductSchema>;
const router = Router();