UNPKG

@fran-834/gs-microservice-core

Version:

Core package for Node.js microservices by Galduria Software. Includes security, logging, validation, and error handling middlewares.

59 lines (58 loc) 2.08 kB
import Ajv from "ajv"; import addFormats from "ajv-formats"; import ajvErrors from "ajv-errors"; import { AppError, commonErrors, commonHTTPErrors } from "../errors/index.js"; const ajv = new Ajv({ allErrors: true }); addFormats(ajv); ajvErrors(ajv); /** * Middleware to validate the request body against a schema. */ const validateCustomerSchemaAsMiddleware = (schema) => async (req, res, next) => { try { const valid = ajv.validate(schema, req.body); if (!valid) { throw new AppError(commonErrors.invalidRequest, commonHTTPErrors.badRequest, JSON.stringify(ajv.errors)); } next(); } catch (error) { next(error); } }; /** * Validates data against a JSON schema using AJV. Throws AppError if validation fails. */ const validateSchema = async (schema, data) => { try { const valid = ajv.validate(schema, data); if (!valid) { const formattedErrors = (ajv.errors || []).map((error) => { return { message: error.message, params: Array.isArray(error.params?.errors) ? error.params.errors.map((param) => ({ instancePath: param.instancePath, keyword: param.keyword, message: param.message, param: !param.instancePath ? param.params : undefined, })) : [ { instancePath: error.instancePath, keyword: error.keyword, message: error.message, param: error.params, }, ], }; }); throw new AppError(commonErrors.badRequest, commonHTTPErrors.badRequest, JSON.stringify(formattedErrors)); } return valid; } catch (error) { throw error; } }; export default validateSchema;