Create Reusable Validation Middleware
Create src/middleware/validate.middleware.js.
Instead of manually validating each request in every controller, create a reusable middleware.
The middleware receives a Zod schema and validates the request body.
If validation succeeds, replace req.body with the parsed and validated value.
If validation fails, return a structured 400 response or pass a validation error to centralized error middleware.
src/middleware/validate.middleware.js
export function validateBody(schema) {
return (req, res, next) => {
const result = schema.safeParse(req.body);
if (!result.success) {
return res.status(400).json({
success: false,
message: 'Validation failed',
errors: result.error.issues.map((issue) => ({
field: issue.path.join('.'),
message: issue.message
}))
});
}
req.body = result.data;
next();
};
}Creates middleware that validates request bodies, returns readable validation errors, and replaces the request body with parsed data.
Key Takeaways
Validation middleware avoids duplicated validation logic.
safeParse() returns structured validation results.
Only validated data should reach controllers.