Spaces:
Sleeping
Sleeping
| class AppError extends Error { | |
| constructor(message, statusCode) { | |
| super(message); | |
| this.statusCode = statusCode; | |
| this.isOperational = true; | |
| Error.captureStackTrace(this, this.constructor); | |
| } | |
| } | |
| function errorHandler(err, _req, res, _next) { | |
| const statusCode = err.isOperational ? err.statusCode : 500; | |
| const message = err.isOperational ? err.message : 'Internal server error'; | |
| console.error(`[ERROR] ${statusCode} - ${err.message}`); | |
| if (!err.isOperational) console.error(err.stack); | |
| res.status(statusCode).json({ | |
| error: message, | |
| ...(process.env.NODE_ENV === 'development' && { stack: err.stack }), | |
| }); | |
| } | |
| function asyncHandler(fn) { | |
| return (req, res, next) => Promise.resolve(fn(req, res, next)).catch(next); | |
| } | |
| module.exports = { AppError, errorHandler, asyncHandler }; | |