first commit

This commit is contained in:
Swapnil
2024-12-06 01:01:25 +05:30
commit 8a60e520c6
29 changed files with 2595 additions and 0 deletions

61
src/middleware/error.ts Normal file
View File

@@ -0,0 +1,61 @@
import { Request, Response, NextFunction } from 'express';
import ApiError from '../utils/helper/ApiError';
import config from '../config/config';
// Middleware to convert different error types to ApiError
export const errorConverter = (
err: any, // Use a broad type to handle various error types
req: Request,
res: Response,
next: NextFunction
): void => {
let error = err;
if (!(err instanceof ApiError)) {
// Handle all other errors
const statusCode =
err.statusCode
? 400
: 500;
const message = err.message || "Internal Server Error";
error = new ApiError(statusCode, message, [err.message], false, err.stack);
}
next(error);
};
// Middleware to handle errors and send responses
export const errorHandler = (
err: ApiError,
req: Request,
res: Response,
next: NextFunction
): void => {
// Determine the status code and message
let { statusCode, message } = err;
if (config.env === 'production' && !err.isOperational) {
// Hide sensitive error details in production
statusCode = 500;
message = "Internal Server Error" as string;
}
// Attach the error message to response locals for debugging
res.locals.errorMessage = err.message;
// Construct the response object
const response = {
code: statusCode,
message,
...(config.env === 'development' && { stack: err.stack }), // Include stack trace in development
};
// Log the error in development mode
if (config.env === 'development') {
console.error(err.stack || err.message);
}
// Send the error response
res.status(statusCode).json(response);
};