50 lines
1012 B
TypeScript
50 lines
1012 B
TypeScript
import { Request, Response, NextFunction } from 'express';
|
|
import { logger } from '../utils/logger';
|
|
|
|
export interface AppError extends Error {
|
|
statusCode?: number;
|
|
isOperational?: boolean;
|
|
}
|
|
|
|
export class CustomError extends Error implements AppError {
|
|
statusCode: number;
|
|
isOperational: boolean;
|
|
|
|
constructor(message: string, statusCode: number = 500) {
|
|
super(message);
|
|
this.statusCode = statusCode;
|
|
this.isOperational = true;
|
|
Error.captureStackTrace(this, this.constructor);
|
|
}
|
|
}
|
|
|
|
export const errorHandler = (
|
|
err: AppError,
|
|
req: Request,
|
|
res: Response,
|
|
next: NextFunction
|
|
) => {
|
|
const statusCode = err.statusCode || 500;
|
|
const message = err.message || 'Internal Server Error';
|
|
|
|
logger.error({
|
|
error: err.message,
|
|
stack: err.stack,
|
|
path: req.path,
|
|
method: req.method,
|
|
});
|
|
|
|
res.status(statusCode).json({
|
|
success: false,
|
|
error: {
|
|
message,
|
|
...(process.env.NODE_ENV === 'development' && { stack: err.stack }),
|
|
},
|
|
});
|
|
};
|
|
|
|
|
|
|
|
|
|
|