UNPKG

@sivaguru/mongoose-error-formatter

Version:

Small utility to simplify mongoose errors

57 lines (54 loc) 1.9 kB
const errors = { general: { default: '{PATH} was invalid.', required: '{PATH} is required.', unique: '{PATH} is already exists.' }, Number: { min: '{PATH} is less than minimum allowed value of ({MIN}).', max: '{PATH} is more than maximum allowed value ({MAX}).' }, Date: { min: '{PATH} is before minimum allowed value ({MIN}).', max: '{PATH} is after maximum allowed value ({MAX}).' }, String: { enum: '{PATH} has an invalid selection.', match: '{PATH} has an invalid value.', minlength: '{PATH} is shorter than the minimum allowed length ({MINLENGTH}).', maxlength: '{PATH} is longer than the maximum allowed length ({MAXLENGTH}).' } }; const updateErrorMessages = (mongoose, customErrors = {}) => { mongoose.Error.messages = { ...mongoose.Error.messages, ...errors, ...customErrors }; } const formatError = (error, mongoose) => { try { let formattedErrors = {}; if (error?.name == "MongoServerError" && error?.code === 11000) { let duplicatedField = Object.keys(error.keyValue)[0]; let uniqueMessage = mongoose?.Error?.messages?.general?.unique || errors.general.unique; formattedErrors[duplicatedField] = uniqueMessage.replace('{PATH}', duplicatedField); } if (error?.errors) { Object.values(error.errors).forEach(err => { if (err?.name == "ValidatorError" || err?.name == "ValidationError") { formattedErrors[err.path] = err.message; } else if (err?.name == "CastError") { formattedErrors[err.path] = `Invalid ${err.kind}`; } }); } return Object.keys(formattedErrors).length ? formattedErrors : false; } catch (error) { return false; } } module.exports.customMongooseErrors = errors; module.exports.updateMongooseErrorMessages = updateErrorMessages; module.exports.formatMongooseError = formatError;