Initial commit
This commit is contained in:
42
api/middlewares/errorHandler.ts
Normal file
42
api/middlewares/errorHandler.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
import type { NextFunction, Request, Response } from 'express'
|
||||
import type { ApiResponse } from '../../shared/types.js'
|
||||
import { ERROR_CODES } from '../../shared/constants/errors.js'
|
||||
import { isAppError, isNodeError } from '../../shared/errors/index.js'
|
||||
import { logger } from '../utils/logger.js'
|
||||
|
||||
export const errorHandler = (err: unknown, _req: Request, res: Response, _next: NextFunction) => {
|
||||
let statusCode: number = 500
|
||||
let code: string = ERROR_CODES.INTERNAL_ERROR
|
||||
let message: string = 'Server internal error'
|
||||
let details: unknown = undefined
|
||||
|
||||
if (isAppError(err)) {
|
||||
statusCode = err.statusCode
|
||||
code = err.code
|
||||
message = err.message
|
||||
details = err.details
|
||||
} else if (isNodeError(err)) {
|
||||
message = err.message
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
details = { stack: err.stack, nodeErrorCode: err.code }
|
||||
}
|
||||
} else if (err instanceof Error) {
|
||||
message = err.message
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
details = { stack: err.stack }
|
||||
}
|
||||
}
|
||||
|
||||
logger.error(err)
|
||||
|
||||
const response: ApiResponse<null> = {
|
||||
success: false,
|
||||
error: {
|
||||
code,
|
||||
message,
|
||||
details: process.env.NODE_ENV === 'production' ? undefined : details,
|
||||
},
|
||||
}
|
||||
|
||||
res.status(statusCode).json(response)
|
||||
}
|
||||
Reference in New Issue
Block a user