UNPKG

easy-express-cwa

Version:

CLI tool to setup a common Express.js backend developed by codewithashim

77 lines (70 loc) 2.44 kB
/* eslint-disable no-console */ /* eslint-disable no-unused-vars */ /* eslint-disable no-unused-expressions */ /* eslint-disable @typescript-eslint/no-unused-vars */ import { ErrorRequestHandler, NextFunction, Request, Response } from 'express'; import config from '../../config'; import ApiError from '../../errors/ApiError'; import handleValidationError from '../../errors/handleValidationError'; import { ZodError } from 'zod'; import handleCastError from '../../errors/handleCastError'; import handleZodError from '../../errors/handleZodError'; import { IGenericErrorMessage } from '../../interfaces/error'; import { errorLogger } from '../../shared/logger'; const globalErrorHandler: ErrorRequestHandler = ( error, req: Request, res: Response, next: NextFunction ) => { config.env === 'development' ? console.log(`🐱‍🏍 globalErrorHandler ~~`, { error }) : errorLogger.error(`🐱‍🏍 globalErrorHandler ~~`, error); let statusCode = 500; let message = 'Something went wrong !'; let errorMessages: IGenericErrorMessage[] = []; if (error?.name === 'ValidationError') { const simplifiedError = handleValidationError(error); statusCode = simplifiedError.statusCode; message = simplifiedError.message; errorMessages = simplifiedError.errorMessages; } else if (error instanceof ZodError) { const simplifiedError = handleZodError(error); statusCode = simplifiedError.statusCode; message = simplifiedError.message; errorMessages = simplifiedError.errorMessages; } else if (error?.name === 'CastError') { const simplifiedError = handleCastError(error); statusCode = simplifiedError.statusCode; message = simplifiedError.message; errorMessages = simplifiedError.errorMessages; } else if (error instanceof ApiError) { statusCode = error?.statusCode; message = error.message; errorMessages = error?.message ? [ { path: '', message: error?.message, }, ] : []; } else if (error instanceof Error) { message = error?.message; errorMessages = error?.message ? [ { path: '', message: error?.message, }, ] : []; } res.status(statusCode).json({ success: false, message, errorMessages, stack: config.env !== 'production' ? error?.stack : undefined, }); }; export default globalErrorHandler;