mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 08:36:12 +01:00
refactor: catch errors from buildHeader in error handler 🔥
This commit is contained in:
@@ -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 };
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user