Sindbad~EG File Manager

Current Path : /home/infinitibizsol/.trash/controllers.8/
Upload File :
Current File : /home/infinitibizsol/.trash/controllers.8/errorHandler.js

import AppError from "../utils/apiError";

const setCastError = (err) => {
  return new AppError(`${err.message}`, 404);
};

const setDuplicateNameError = (err) => {
  if (err.keyPattern.email === 1) err.keyValue.name = "Email";
  const msg =
    err.keyValue.name === "Email"
      ? `Already user has the same: / ${err.keyValue.name} /`
      : `Already user has the same name: / ${err.keyValue.name} /`;
  return new AppError(msg, 404);
};

const setValidatorError = (err) => {
  const msgs = Object.values(err.errors)
    .map((el) => el.message)
    .join(",");
  return new AppError(`/ ${msgs} /`, 404);
};

const setJwtError = (err) => {
  new AppError(`${err.message}`, 402);
};

const unAuthorizedErrorHandler = (err) => {
  return new AppError(`${err.inner.message}`, 402);
};

const productionError = (err, req, res) => {
  let error = err;

  if (err.name === "UnauthorizedError") error = unAuthorizedErrorHandler(error);
  if (err.name === "MongoNetworkError") error.message = "Mongo Not working";
  if (err.name === "CastError") error = setCastError(error);
  if (err.code === 11000) error = setDuplicateNameError(error);

  if (err._message === "Tour validation failed")
    error = setValidatorError(error);
  if (err._message === "users validation failed")
    error = setValidatorError(error);

  if (err.name === "JsonWebTokenError") error = setJwtError(error);
  if (err.name === "TokenExpiredError") error = setJwtError(error);

  return res.status(err.statusCode).json({
    name: error.name,
    message: error.message,
    statusCode: error.statusCode,
    isOperational: error.isOperational,
  });
};

const developmentError = (err, req, res) => {
  res.status(err.statusCode).json({
    name: err.name,
    message: err.message,
    status: err.status,
    statusCode: err.statusCode,
    isOperational: err.isOperational,
    stack: err.stack,
  });
};

const globalErrorHandler = (err, req, res, next) => {
  err.statusCode = err.statusCode || 500;
  err.status = err.status || "error";

  if (process.env.NODE_ENV === "development") {
    developmentError(err, req, res);
  } else if (process.env.NODE_ENV === "production") {
    productionError(err, req, res);
  }

  next();
};

export default globalErrorHandler;

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists