import { Request, Response, NextFunction } from 'express';
import { logger } from '../Logger';
import { BaseError } from '../utils/BaseError';
export const errorMiddleware = (error: Error | BaseError, req: Request, res: Response, _next: NextFunction) => {
logger.error('Request error', {
requestId: req.requestId,
error: error.message,
stack: error.stack,
method: req.method,
url: req.url,
timestamp: new Date().toISOString(),
});
if (error instanceof BaseError) {
return res.status(error.statusCode).json({
success: false,
error: {
code: error.code,
message: error.message,
requestId: req.requestId,
timestamp: error.timestamp,
},
});
}
if (error.name === 'ValidationError' || error.name === 'ZodError') {
return res.status(400).json({
success: false,
error: {
code: 'VALIDATION_ERROR',
message: error.message,
requestId: req.requestId,
timestamp: new Date().toISOString(),
},
});
}
const isDevelopment = process.env.NODE_ENV === 'development';
res.status(500).json({
success: false,
error: {
code: 'INTERNAL_SERVER_ERROR',
message: isDevelopment ? error.message : 'Internal server error',
requestId: req.requestId,
timestamp: new Date().toISOString(),
...(isDevelopment && { stack: error.stack }),
},
});
};