UNPKG

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
"use strict"; 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 };