reorg
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
const { logError } = require('./logger');
|
||||
|
||||
/**
|
||||
* Creates a user-friendly error message from an error object
|
||||
* @param {Error} err - Error object
|
||||
* @returns {string} - User-friendly error message
|
||||
*/
|
||||
function getUserFriendlyError(err) {
|
||||
if (!err) {
|
||||
return 'An unknown error occurred';
|
||||
}
|
||||
|
||||
// Handle specific error types
|
||||
if (err.code === 'EADDRINUSE') {
|
||||
return 'The requested port is already in use. Please choose a different port.';
|
||||
}
|
||||
|
||||
if (err.code === 'ENOENT') {
|
||||
return 'The requested file or directory was not found.';
|
||||
}
|
||||
|
||||
if (err.code === 'EACCES') {
|
||||
return 'Permission denied. Please ensure you have the necessary permissions.';
|
||||
}
|
||||
|
||||
if (err.code === 'ECONNREFUSED') {
|
||||
return 'Connection refused. The service may not be running.';
|
||||
}
|
||||
|
||||
if (err.code === 'ETIMEDOUT') {
|
||||
return 'Operation timed out. Please try again.';
|
||||
}
|
||||
|
||||
// Check for validation errors
|
||||
if (err.message && err.message.includes('validation') || err.message.includes('Invalid')) {
|
||||
return err.message;
|
||||
}
|
||||
|
||||
// Generic error message
|
||||
if (err.message) {
|
||||
// Don't expose internal error details in production
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
return 'An error occurred processing your request. Please try again.';
|
||||
}
|
||||
return err.message;
|
||||
}
|
||||
|
||||
return 'An unexpected error occurred. Please try again.';
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an error response object
|
||||
* @param {Error} err - Error object
|
||||
* @param {number} defaultStatusCode - Default HTTP status code
|
||||
* @returns {object} - Error response object
|
||||
*/
|
||||
function createErrorResponse(err, defaultStatusCode = 500) {
|
||||
const message = getUserFriendlyError(err);
|
||||
const statusCode = err.statusCode || err.status || defaultStatusCode;
|
||||
|
||||
logError('ErrorHandler', `Error: ${err.message || err} (Status: ${statusCode})`);
|
||||
|
||||
return {
|
||||
statusCode,
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
error: err.name || 'Error',
|
||||
message: message,
|
||||
...(process.env.NODE_ENV !== 'production' && err.stack ? { stack: err.stack } : {})
|
||||
})
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = { getUserFriendlyError, createErrorResponse };
|
||||
|
||||
Reference in New Issue
Block a user