myex-cli
Version:
Opinionated Express.js framework with CLI tools
55 lines (48 loc) • 1.7 kB
JavaScript
import { logger } from '../utils/logger.js';
/**
* Configure error handling middleware for the Express app
* @param {import('express').Application} app - Express application
*/
export const configureErrorHandlers = (app) => {
// 404 Not Found handler
app.use(notFoundHandler);
// Global error handler
app.use(errorHandler);
};
/**
* Handle 404 not found errors
* @param {import('express').Request} req - Express request object
* @param {import('express').Response} res - Express response object
* @param {import('express').NextFunction} next - Express next function
*/
export const notFoundHandler = (req, res, next) => {
const error = new Error(`Not Found - ${req.originalUrl}`);
error.status = 404;
next(error);
};
/**
* Global error handler for all errors in the application
* @param {Error} err - Error object
* @param {import('express').Request} req - Express request object
* @param {import('express').Response} res - Express response object
* @param {import('express').NextFunction} next - Express next function
*/
export const errorHandler = (err, req, res, next) => {
// Set default status if not set
const statusCode = err.status || 500;
// Log error details
if (statusCode === 500) {
logger.error(`[${req.method}] ${req.path} >> ${err.stack}`);
} else {
logger.warn(`[${req.method}] ${req.path} >> ${err.message}`);
}
// Determine what error information to expose based on environment
const isDevelopment = process.env.NODE_ENV === 'development';
// Send error response
res.status(statusCode).json({
status: 'error',
statusCode,
message: err.message,
...(isDevelopment && { stack: err.stack }),
});
};