UNPKG

@bodheesh/create-bodhi-node-app

Version:

Create a production-ready Node.js REST API with zero configuration

66 lines (62 loc) 2.28 kB
import { Request, Response, NextFunction } from 'express'; import validate from '@bodhi/form-validations'; export const generateValidationMiddleware = (schema: any) => { return (req: Request, res: Response, next: NextFunction) => { try { // Use isObject for form validation with schema const validationResult = validate.isObject(req.body, { requiredFields: Object.keys(schema).filter(key => schema[key].required), fieldValidators: Object.entries(schema).reduce((acc: any, [field, rules]: [string, any]) => { acc[field] = (value: any) => { switch (rules.type) { case 'string': if (rules.format === 'email') { return validate.isEmail(value); } else if (rules.format === 'password') { return validate.isStrongPassword(value, { minLength: rules.minLength || 8, requireUppercase: true, requireNumbers: true }); } else if (rules.format === 'phone') { return validate.isPhone(value); } else { return validate.isUsername(value, { minLength: rules.minLength, maxLength: rules.maxLength }); } case 'number': return validate.isNumber(value, { min: rules.minimum, max: rules.maximum, precision: rules.precision }); case 'date': return validate.isDate(value, { format: rules.format || 'YYYY-MM-DD', minDate: rules.minimum, maxDate: rules.maximum }); default: return { isValid: true, message: 'Valid' }; } }; return acc; }, {}) }); if (!validationResult.isValid) { return res.status(400).json({ success: false, errors: validationResult.errors }); } next(); } catch (error) { return res.status(500).json({ success: false, error: 'Validation error occurred' }); } }; };