78 lines
2.1 KiB
JavaScript
78 lines
2.1 KiB
JavaScript
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 };
|
|
|