HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/good-life-be/middleware/errorHandler.js
import Joi from 'joi';
import { failedResponse } from '../helper/response.js';
import BadRequest from '../helper/exception/badRequest.js';
import Unauthorized from '../helper/exception/unauthorized.js';
import { logger } from '../config/winston-config.js';
import Forbidden from '../helper/exception/forbidden.js';

export default (err, req, res, next) => {
    if (err instanceof Joi.ValidationError) {
        return res
            .status(400)
            .json(
                failedResponse(
                    err.message?.replace(/"/g, ''),
                    400,
                    'VALIDATION_ERROR'
                )
            );
    }

    if (err instanceof BadRequest) {
        return res
            .status(400)
            .json(failedResponse(err.message, err.statusCode, err.code));
    }

    if (err instanceof Unauthorized) {
        return res
            .status(401)
            .json(failedResponse(err.message, err.statusCode, err.code));
    }

    if (err instanceof Forbidden) {
        return res
            .status(403)
            .json(failedResponse(err.message, err.statusCode, err.code));
    }

    if (
        ['TokenExpiredError', 'JsonWebTokenError', 'NotBeforeError'].includes(
            err.name
        )
    ) {
        return res.status(401).json(failedResponse(err.message, 401, err.name));
    }

    logger.error({
        message: err.message,
        stack: err.stack,
    });

    const { NODE_ENV } = process.env;

    const message =
        NODE_ENV === 'production' ? 'Something went wrong' : err.message;

    return res.status(500).json(failedResponse(message, 500));
};