32 lines
716 B
TypeScript
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' });
|
|
}
|