|
|
|
@ -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 };
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|