From 73a9ca09c972de14523e095f02644c12d2b244b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 21 Oct 2021 10:28:27 -0400 Subject: [PATCH] refactor: catch errors from buildHeader in error handler :fire: --- src/controllers/errors.js | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/controllers/errors.js b/src/controllers/errors.js index f77e64a25a..2ea7e472cb 100644 --- a/src/controllers/errors.js +++ b/src/controllers/errors.js @@ -38,7 +38,7 @@ exports.handleURIErrors = async function handleURIErrors(err, req, res, next) { // this needs to have four arguments or express treats it as `(req, res, next)` // don't remove `next`! -exports.handleErrors = function handleErrors(err, req, res, next) { // eslint-disable-line no-unused-vars +exports.handleErrors = async function handleErrors(err, req, res, next) { // eslint-disable-line no-unused-vars const cases = { EBADCSRFTOKEN: function () { winston.error(`${req.path}\n${err.message}`); @@ -80,20 +80,26 @@ exports.handleErrors = function handleErrors(err, req, res, next) { // eslint-di res.render('500', data); } }; - - plugins.hooks.fire('filter:error.handle', { - cases: cases, - }, (_err, data) => { - if (_err) { - // Assume defaults - winston.warn(`[errors/handle] Unable to retrieve plugin handlers for errors: ${_err.message}`); - data.cases = cases; - } - + const data = await getErrorHandlers(cases); + try { if (data.cases.hasOwnProperty(err.code)) { data.cases[err.code](err, req, res, defaultHandler); } else { - defaultHandler(); + await defaultHandler(); } - }); + } catch (_err) { + res.status(500).send(_err.message); + } }; + +async function getErrorHandlers(cases) { + try { + return await plugins.hooks.fire('filter:error.handle', { + cases: cases, + }); + } catch (err) { + // Assume defaults + winston.warn(`[errors/handle] Unable to retrieve plugin handlers for errors: ${err.message}`); + return { cases }; + } +}