feat: map and expose objection.js errors

This commit is contained in:
Ali BARIN
2024-08-26 12:14:30 +00:00
parent 81c39d7d93
commit 0b63922f46
2 changed files with 25 additions and 2 deletions

View File

@@ -1,8 +1,9 @@
import logger from './logger.js';
import objection from 'objection';
import * as Sentry from './sentry.ee.js';
const { NotFoundError, DataError } = objection;
const { NotFoundError, DataError, ValidationError } = objection;
import HttpError from '../errors/http.js';
import { renderObjectionError } from './renderer.js';
// Do not remove `next` argument as the function signature will not fit for an error handler middleware
// eslint-disable-next-line no-unused-vars
@@ -15,6 +16,10 @@ const errorHandler = (error, request, response, next) => {
response.status(404).end();
}
if (error instanceof ValidationError) {
renderObjectionError(response, error);
}
if (error instanceof DataError) {
response.status(400).end();
}

View File

@@ -64,4 +64,22 @@ const renderError = (response, errors, status, type) => {
return response.status(errorStatus).send(payload);
};
export { renderObject, renderError };
const renderObjectionError = (response, error) => {
const {
statusCode,
type,
data = {},
} = error;
const errorEntries = Object.entries(data);
const computedErrors = errorEntries.reduce((errors, [fieldName, fieldErrors]) => {
const computedErrors = fieldErrors.map(fieldError => fieldError.message);
return errors.concat({ [fieldName]: computedErrors });
}, []);
return renderError(response, computedErrors, statusCode, type);
};
export { renderObject, renderError, renderObjectionError };