@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
JavaScript
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;