@sivaguru/mongoose-error-formatter
Version:
Small utility to simplify mongoose errors
57 lines (54 loc) • 1.9 kB
JavaScript
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;