Один из вариантов - добавить пользовательское промежуточное ПО для обработки ошибок и добавить проверку для обнаружения ошибок синтаксического анализа JSON, подобных этой:
app.use(require('body-parser').json());
app.use(require('body-parser').urlencoded({ extended: true }));
...
app.use((err, req, res, next) => {
// This check makes sure this is a JSON parsing issue, but it might be
// coming from any middleware, not just body-parser:
if (err instanceof SyntaxError && err.status === 400 && 'body' in err) {
console.error(err);
return res.sendStatus(400); // Bad request
}
next();
});
Другой вариант - обернуть промежуточное ПО body-parser
, чтобы отлавливать ошибки, поступающие только оттуда:
const bodyParser = require('body-parser');
app.use((req, res, next) => {
bodyParser.json()(req, res, err => {
if (err) {
console.error(err);
return res.sendStatus(400); // Bad request
}
next();
});
});
Или, если вы хотите повторно использовать эту функцию для отлова разных ошибок из разных промежуточных программ, вы можете сделать:
function handleError(middleware, errorHandler) {
middleware(req, res, err => err ? errorHandler(err, req, res, next) : next());
}
const bodyParser = require('body-parser');
app.use(handleError(bodyParser.json(), (err, req, res, next) => {
if (err) {
console.error(err);
return res.sendStatus(400); // Bad request
}
next();
}));