Почему моя ошибка не возвращается в моем экспресс-ответе?

1

У меня есть настройка обработчика ошибок по умолчанию в моем экспресс-приложении.

 app.use(function unhandledErrorHandler(err, req, res, next) {
   res.status(err.status || 500).json({
     error: err
   });
 });

Однако всякий раз, когда я вызываю маршрут и возникает ошибка, я получаю ответ, который выглядит так.

{
  "error": {}
}

Может кто-нибудь помочь мне понять, почему выражение возвращает мою ошибку как пустой объект?

Теги:
express

1 ответ

4
Лучший ответ

Причиной экземпляра 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 });
  • 0
    Спасибо за быстрый исчерпывающий ответ!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню