36 lines
700 B
JavaScript
36 lines
700 B
JavaScript
const Ajv = require('ajv');
|
|
const {customThrow} = require('../helpers');
|
|
|
|
const parseAndValidateBody = async (schema, body) => {
|
|
let parsedBody;
|
|
|
|
try {
|
|
parsedBody = JSON.parse(body);
|
|
} catch (err) {
|
|
customThrow(400, 'Error. Malformed event.parsedBody.');
|
|
}
|
|
|
|
const validation = validateBody(schema, parsedBody);
|
|
|
|
if (!validation.isValid) {
|
|
customThrow(400, validation.error);
|
|
}
|
|
|
|
return parsedBody;
|
|
};
|
|
|
|
const validateBody = (schema, body) => {
|
|
const ajv = new Ajv();
|
|
const validate = ajv.compile(schema);
|
|
const isValid = validate(body);
|
|
|
|
return {
|
|
isValid: isValid,
|
|
error: JSON.stringify(validate.errors)
|
|
}
|
|
};
|
|
|
|
module.exports = {
|
|
parseAndValidateBody,
|
|
};
|