Files
dashboard/backend/src/middleware/error.middleware.ts
Matthias Hochmeister 93a87a7ae9 apply security audit
2026-03-11 13:18:10 +01:00

65 lines
1.4 KiB
TypeScript

import { Request, Response, NextFunction } from 'express';
import logger from '../utils/logger';
export class AppError extends Error {
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: Error | AppError,
req: Request,
res: Response,
_next: NextFunction
): void => {
if (err instanceof AppError) {
logger.error('Application Error', {
message: err.message,
statusCode: err.statusCode,
stack: err.stack,
path: req.path,
method: req.method,
});
res.status(err.statusCode).json({
status: 'error',
message: err.message,
});
return;
}
// Handle unexpected errors
logger.error('Unexpected Error', {
message: err.message,
stack: err.stack,
path: req.path,
method: req.method,
});
res.status(500).json({
status: 'error',
message: 'An internal error occurred',
});
};
export const notFoundHandler = (req: Request, res: Response): void => {
res.status(404).json({
status: 'error',
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);
};
};