import { AppError } from './errors.js'; // Lets controllers be plain async functions: a thrown error or rejected promise reaches errorHandler export const asyncHandler = (fn) => (req, res, next) => Promise.resolve(fn(req, res, next)).catch(next); // Registered last in index.js export function errorHandler(err, req, res, next) { if (res.headersSent) return next(err); if (err instanceof AppError) { return res.status(err.status).json({ error: err.code, message: err.message }); } // express.json() payload problems (too large, malformed JSON) carry their own 4xx status if (err.status >= 400 && err.status < 500) { return res.status(err.status).json({ error: 'BAD_REQUEST', message: err.message }); } console.error('[Unhandled Error]', err); res.status(500).json({ error: 'INTERNAL_ERROR', message: 'Something went wrong on the server.' }); }