tranxpress
Version:
A smart async wrapper for Express with MongoDB transaction support.
62 lines (61 loc) • 2.4 kB
JavaScript
;
// src/errors/MongoErrorHandler.ts
Object.defineProperty(exports, "__esModule", { value: true });
exports.MongoHandledError = void 0;
class MongoHandledError extends Error {
constructor(error) {
let message = "An unexpected MongoDB error occurred";
let statusCode = 500;
switch (error.name) {
case "ValidationError":
message = "Validation failed";
statusCode = 400;
break;
case "CastError":
message = `Invalid value for '${error.path}': ${error.value}`;
statusCode = 400;
break;
case "MongoServerError":
if (error.code === 11000) {
const field = Object.keys(error.keyPattern || {})[0];
message = `Duplicate key error on field '${field}'`;
statusCode = 409;
}
break;
case "MongoError":
switch (error.code) {
case 50:
message = "Exceeded time limit — try again later";
statusCode = 503;
break;
case 11600:
message = "Operation interrupted — possible replica set issue";
statusCode = 503;
break;
case 121:
message = "Document validation failed";
statusCode = 422;
break;
case 26:
message = "Collection not found";
statusCode = 404;
break;
default:
message = error.message || message;
}
break;
}
super(message);
this.statusCode = statusCode;
this.originalError = error;
if (process.env.NODE_ENV === "development") {
console.error("🧩 Mongo Error Debug Info:");
console.error("🧬 Name:", error.name);
console.error("🔢 Code:", error.code);
console.error("📍 Path:", error.path);
console.error("🧠 Reason:", error.reason);
console.error("📜 Stack:", error.stack);
}
}
}
exports.MongoHandledError = MongoHandledError;