Экспресс обрабатывает ошибки со значениями кода состояния автоматически? - PullRequest
0 голосов
/ 10 июля 2019

TL / DR Есть ли в Express какой-либо код обработки ошибок по умолчанию, который не задокументирован?


Я столкнулся с каким-то удивительным поведением в Express (v4.17.1), и это обработка ошибок по умолчанию.

Я нахожусь на ранних стадиях создания API. Я собрал обработчик маршрута и подключил его к первому маршруту вместе с несколькими юнит-тестами.

Мой дизайн очень похож на описанный в этот ответ : у меня есть пользовательский класс с именем NotFoundError, который расширяет Error и включает в себя свойство statusCode.

Маршрут выглядит так:

router.get('/api/resource/:id', ...);

Эта ошибка передается в функцию Express next, когда, например, я запрашиваю базу данных и не могу найти строку с предоставленным значением :id.

Теперь я ожидал, что напишет собственный обработчик ошибок, который обработает NotFoundError и ответит кодом состояния 404. Но к моему удивлению, тест, который я написал для ошибки 404, пройден!

Я немного поиграл с моим кодом и обнаружил, что изменение свойства statusCode в моем пользовательском классе ошибок (на myStatusCode) приводит к сбою запроса с ошибкой 500 (что и ожидалось).

Так что Express, похоже, нравится свойство statusCode, и оно знает, что с ним делать. Я не могу найти ничего в Экспресс-документации , которая описывает это поведение.

Это недокументированное поведение? Или что-то еще происходит?

1 Ответ

0 голосов
/ 10 июля 2019

Получается, что ответ Да - Express "автоматически" обрабатывает ошибки со свойством statusCode.Спасибо @PimentoWeb за указание мне в правильном направлении.

Оказывается, у Express есть зависимость, называемая finalhandler , которая возвращает HTTP-статус на основе свойства status или statusCodeобъекта ошибки:

Res.statusCode устанавливается из err.status (или err.statusCode).Если это значение находится вне диапазона 4xx или 5xx, оно будет установлено на 500.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...