warmbox/apps/api/src/middleware/errorHandler.ts

32 lines
716 B
TypeScript

import { Request, Response, NextFunction } from 'express';
import { ZodError } from 'zod';
export class AppError extends Error {
constructor(
public statusCode: number,
message: string,
) {
super(message);
this.name = 'AppError';
}
}
export function errorHandler(
err: Error,
_req: Request,
res: Response,
_next: NextFunction,
): void {
if (err instanceof AppError) {
res.status(err.statusCode).json({ error: err.message });
return;
}
if (err instanceof ZodError) {
res.status(400).json({ error: err.errors.map((e) => e.message).join(', ') });
return;
}
console.error('Unhandled error:', err);
res.status(500).json({ error: 'Internal server error' });
}