diff --git a/server/middlewares/error-handlers.js b/server/middlewares/error-handlers.js index 821a36d4c0..b257970e10 100644 --- a/server/middlewares/error-handlers.js +++ b/server/middlewares/error-handlers.js @@ -45,22 +45,19 @@ export default function prodErrorHandler() { // error handling in production. // disabling eslint due to express parity rules for error handlers return function(err, req, res, next) { // eslint-disable-line - // respect err.status - if (err.status) { - res.statusCode = err.status; - } - - // default status code to 500 - if (res.statusCode < 400) { - res.statusCode = 500; + const handled = unwrapHandledError(err); + // respect handled error status + let status = handled.status || err.status || res.statusCode; + if (!handled.status && status < 400) { + status = 500; } + res.status(status); // parse res type const accept = accepts(req); const type = accept.type('html', 'json', 'text'); - const handled = unwrapHandledError(err); - const redirectTo = handled.redirectTo || '/map'; + const redirectTo = handled.redirectTo || '/'; const message = handled.message || 'Oops! Something went wrong. Please try again later'; @@ -77,7 +74,7 @@ export default function prodErrorHandler() { stack: createStackHtml(err), errorTitle: createErrorTitle(err), title: 'freeCodeCamp - Server Error', - status: err.statusCode + status } ); } diff --git a/server/utils/create-handled-error.js b/server/utils/create-handled-error.js index df2f76ec94..d5e9a00934 100644 --- a/server/utils/create-handled-error.js +++ b/server/utils/create-handled-error.js @@ -11,18 +11,20 @@ export function unwrapHandledError(err) { export function wrapHandledError(err, { type, message, - redirectTo + redirectTo, + status = 200 }) { - err[_handledError] = { type, message, redirectTo }; + err[_handledError] = { type, message, redirectTo, status }; return err; } -export const createValidatorErrorFormatter = (type, redirectTo) => +export const createValidatorErrorFormatter = (type, redirectTo, status) => ({ msg }) => wrapHandledError( new Error(msg), { type, message: msg, - redirectTo + redirectTo, + status } );