Joi — schema validation for request data.
1const Joi = require("joi");23// Validation schemas4const schemas = {5 createUser: Joi.object({6 name: Joi.string().min(2).max(50).required(),7 email: Joi.string().email().required(),8 password: Joi.string().min(8).pattern(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])/),9 age: Joi.number().integer().min(18).max(120),10 }),1112 updateUser: Joi.object({13 name: Joi.string().min(2).max(50),14 email: Joi.string().email(),15 }).min(1),16};1718// Validation middleware19function validate(schemaName, property = "body") {20 return (req, res, next) => {21 const { error, value } = schemas[schemaName].validate(req[property], {22 abortEarly: false,23 stripUnknown: true,24 });2526 if (error) {27 const errors = error.details.map(d => ({28 field: d.path.join("."),29 message: d.message,30 }));31 return res.status(400).json({ errors });32 }3334 req[property] = value;35 next();36 };37}3839// Usage40app.post("/users", validate("createUser"), (req, res) => {41 // req.body is validated and sanitized42 res.json({ data: req.body });43});4445app.put("/users/:id", validate("updateUser"), (req, res) => {46 res.json({ data: req.body });47});
Key points: