UNPKG

gbox-errors

Version:

Error handlers

86 lines (60 loc) 2.44 kB
const boom = require('boom'); const errorParser = require('./errorParser'); module.exports = function (data) { let err; if (!data.code) data.code = "UNHANDLED_ERROR"; switch (data.code.toUpperCase()) { case 'FAILED': err = boom.badImplementation(data); err.output.payload.message = 'Database connection failed.'; break; case 'E_UNIQUE': err = boom.conflict(data); err.output.payload.message = `${errorParser(data)} is already in use`; break; case 'E_INVALID_NEW_RECORD': let customMessage; if (data.details && data.details.length) { let keyword = data.details.substring(data.details.indexOf('`') + 1, data.details.indexOf('`', data.details.indexOf('`') + 1)); if (!!keyword.length) { customMessage = "Please check if param " + keyword + " is set or valid."; } } err = boom.badRequest(data); if (customMessage) err.output.payload.message = customMessage; break; case 'E_MISSING_OR_INVALID_PARAMS': err = boom.badRequest(data); err.output.payload.message = data.problems[0]; break; case 'E_QUERY_FAILED': if (data.hasOwnProperty('raw')) { err = boom.badImplementation(data.raw.error); err.output.payload.message = data.raw.error.message; if (data.raw.error.message.includes('ER_PARSE_ERROR') || data.raw.error.code === 'ER_PARSE_ERROR') { err.output.payload.message = err.output.payload.message.replace("You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near"," Syntax error: "); } }else { err = boom.badImplementation(data); } break; case 'UNHANDLED_ERROR': err = boom.badImplementation(data); if (data.message) err.output.payload.message = data.message; break; case 'E_NON_ERROR': // TODO: Test errors in production mode err = boom.badImplementation(); if (data.hasOwnProperty('raw') && data.raw.hasOwnProperty('message')) { err.output.payload.message = data.raw.message; } break; default: err = boom.badImplementation('Contact system admin'); break; } if (err.output.payload.message.length > 150) { err.output.payload.message = err.output.payload.message.slice(0, 150); } return err; };