45 lines
1.2 KiB
JavaScript
45 lines
1.2 KiB
JavaScript
const mongoose = require('mongoose');
|
|
const httpStatus = require('http-status');
|
|
const config = require('../config/config');
|
|
const logger = require('../config/logger');
|
|
const ApiError = require('../utils/ApiError');
|
|
|
|
const errorConverter = (err, req, res, next) => {
|
|
let error = err;
|
|
if (!(error instanceof ApiError)) {
|
|
const statusCode =
|
|
error.statusCode || error instanceof mongoose.Error ? httpStatus.BAD_REQUEST : httpStatus.INTERNAL_SERVER_ERROR;
|
|
const message = error.message || httpStatus[statusCode];
|
|
error = new ApiError(statusCode, message, false, err.stack);
|
|
}
|
|
next(error);
|
|
};
|
|
|
|
// eslint-disable-next-line no-unused-vars
|
|
const errorHandler = (err, req, res, next) => {
|
|
let { statusCode, message } = err;
|
|
if (config.env === 'production' && !err.isOperational) {
|
|
statusCode = httpStatus.INTERNAL_SERVER_ERROR;
|
|
message = httpStatus[httpStatus.INTERNAL_SERVER_ERROR];
|
|
}
|
|
|
|
res.locals.errorMessage = err.message;
|
|
|
|
const response = {
|
|
code: statusCode,
|
|
message,
|
|
...(config.env === 'development' && { stack: err.stack }),
|
|
};
|
|
|
|
if (config.env === 'development') {
|
|
logger.error(err);
|
|
}
|
|
|
|
res.status(statusCode).send(response);
|
|
};
|
|
|
|
module.exports = {
|
|
errorConverter,
|
|
errorHandler,
|
|
};
|