У меня есть настройка обработчика ошибок по умолчанию в моем экспресс-приложении.
app.use(function unhandledErrorHandler(err, req, res, next) {
res.status(err.status || 500).json({
error: err
});
});
Однако всякий раз, когда я вызываю маршрут и возникает ошибка, я получаю ответ, который выглядит так.
{
"error": {}
}
Может кто-нибудь помочь мне понять, почему выражение возвращает мою ошибку как пустой объект?
Причиной экземпляра Error
являются пустые объекты, потому что нормальные свойства (например, .message
, .stack
и т.д.) Объекта Error
не заданы как перечислимые, а JSON.stringify()
(используется res.json()
) игнорирует неперечислимые свойства.
Если вы просто хотите отправить часть сообщения (не считая трассировки стека), вы можете сделать это вместо этого:
res.json({ error: err.message });
или же
res.json({ error: { message: err.message } });
В противном случае, если вы хотите включить другие настраиваемые, перечислимые свойства, которые могли быть привязаны к экземпляру Error
, вы можете сделать перечисление .message
а затем использовать тот же код, который вы используете сейчас:
Object.defineProperty(err, 'message', { enumerable: true });
res.json({ error: err });