sharp-error-handler
Version:
an error handler that integrates with Hapi/boom to manage all server errors through JSON file
86 lines (66 loc) • 1.94 kB
JavaScript
;
const _ = require('lodash');
const boom = require('boom');
const customHapiError = function(error) {
const boomifiedError = boom.boomify(error, { statusCode: error.statusCode });
if(! _.isNil(error.extraFields)) {
const invalidFieldErrorMsg = "Error Handler Error - the attribute extra fields should be an object";
if(! _.isObject(error.extraFields)) {
throw new Error(invalidFieldErrorMsg);
}
else if(_.isArray(error.extraFields)) {
throw new Error(invalidFieldErrorMsg);
}
else {
boomifiedError.output.payload = _.merge(error.extraFields, boomifiedError.output.payload);
}
}
return boomifiedError;
};
const createServerErrors = function (errorsData) {
let Errors = _.mapValues(errorsData, (errorItem) => {
return function(data) {
this.constructor.prototype.__proto__ = Error.prototype;
this.data = data;
this.isCreatedServerError = true;
_.forEach(errorItem, (value, key) => {
this[key] = value;
if(key === 'message') {
this[key] = value + _.toString(data);
}
});
Error.captureStackTrace(this, this.constructor);
}
});
Errors = _.mapKeys(Errors, (value, key) => {
return _.upperFirst(key);
});
return Errors;
};
const wrapError = function (loggerClass, error) {
if(!_.isNil(loggerClass)) {
try {
loggerClass.log(error);
}
catch(err) {
console.log('The logger class you provided doesn\'t have a log function');
};
}
return customHapiError(error);
};
const wrapErrorWithTag = function (loggerClass, tag, error) {
if(!_.isNil(loggerClass)) {
try {
loggerClass.log(tag, error);
}
catch(err) {
console.log('The logger class you provided doesn\'t have a log function');
};
}
return customHapiError(error);
};
module.exports = {
wrapError,
wrapErrorWithTag,
createServerErrors
};