forked from swapnil.bendal/TypeScript-Backend-Template
first commit
This commit is contained in:
61
src/middleware/error.ts
Normal file
61
src/middleware/error.ts
Normal 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);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user