import { Request, Response, NextFunction } from 'express';
import { logger } from '../utils/logger';
export const errorHandler = (
error: Error,
req: Request,
res: Response,
_next: NextFunction
) => {
logger.error('Unhandled error', {
error: error.message,
stack: error.stack,
url: req.url,
method: req.method,
ip: req.ip,
});
// Don't expose internal errors in production
const isDevelopment = process.env.NODE_ENV === 'development';
res.status(500).json({
success: false,
message: isDevelopment ? error.message : 'Internal server error',
...(isDevelopment && { stack: error.stack }),
});
};
export const notFound = (req: Request, res: Response) => {
res.status(404).json({
success: false,
message: `Route ${req.originalUrl} not found`,
});
};
export const asyncHandler = (fn: Function) => {
return (req: Request, res: Response, next: NextFunction) => {
Promise.resolve(fn(req, res, next)).catch(next);
};
};