gbox-errors
Version:
Error handlers
86 lines (60 loc) • 2.44 kB
JavaScript
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;
};