Files
XCDesktop/api/middlewares/errorHandler.ts
2026-03-08 01:34:54 +08:00

43 lines
1.2 KiB
TypeScript

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)
}