First commit
This commit is contained in:
66
server/lib/errorHandler.js
Normal file
66
server/lib/errorHandler.js
Normal file
@@ -0,0 +1,66 @@
|
||||
/**
|
||||
* Error Handling Middleware
|
||||
* Centralized error handling for consistent API responses
|
||||
*/
|
||||
|
||||
/**
|
||||
* Error handler middleware
|
||||
* Catches errors from routes and formats response
|
||||
*/
|
||||
function errorHandler(err, req, res, next) {
|
||||
// Log error for debugging
|
||||
console.error('Error:', err);
|
||||
|
||||
// Default error response
|
||||
let statusCode = 500;
|
||||
let message = 'Internal server error';
|
||||
|
||||
// Handle specific error types
|
||||
if (err.message) {
|
||||
message = err.message;
|
||||
|
||||
// SQLite constraint errors
|
||||
if (err.message.includes('UNIQUE constraint')) {
|
||||
statusCode = 409; // Conflict
|
||||
message = 'A record with that value already exists';
|
||||
} else if (err.message.includes('FOREIGN KEY constraint')) {
|
||||
statusCode = 400; // Bad Request
|
||||
message = 'Invalid reference to related record';
|
||||
} else if (err.message.includes('NOT NULL constraint')) {
|
||||
statusCode = 400;
|
||||
message = 'Required field is missing';
|
||||
} else if (err.message.includes('CHECK constraint')) {
|
||||
statusCode = 400;
|
||||
message = 'Value does not meet validation requirements';
|
||||
}
|
||||
|
||||
// Custom application errors
|
||||
else if (err.message.includes('not found')) {
|
||||
statusCode = 404;
|
||||
} else if (err.message.includes('Cannot delete')) {
|
||||
statusCode = 400;
|
||||
}
|
||||
}
|
||||
|
||||
// Send error response
|
||||
res.status(statusCode).json({
|
||||
error: message,
|
||||
...(process.env.NODE_ENV === 'development' && { stack: err.stack })
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 404 Not Found handler
|
||||
* Catches requests to undefined routes
|
||||
*/
|
||||
function notFoundHandler(req, res) {
|
||||
res.status(404).json({
|
||||
error: 'Route not found',
|
||||
path: req.path
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
errorHandler,
|
||||
notFoundHandler
|
||||
};
|
||||
Reference in New Issue
Block a user