Валидация и обработка ошибок
Отклоняйте плохой ввод рано и превращайте каждый сбой в чистый, предсказуемый ответ.
Главная идея: Сервер, который обрабатывает только «счастливый путь», — это демо, а не продукт. Реальные запросы приходят с пропущенными полями, неверными типами и неожиданными сбоями глубоко внутри кода. Валидация останавливает плохой ввод на пороге; обработка ошибок гарантирует, что когда что-то всё же ломается, клиент получает ясный, согласованный ответ вместо падения или утёкшего стека.
К концу этой темы вы сможете:
- валидировать входящие данные на границе доверия — вручную и с помощью библиотеки схем,
- сигнализировать о сбоях объектом
Errorи своим классом ошибки, несущим код статуса, - ловить асинхронные ошибки, чтобы они доходили до Express, а не роняли процесс,
- написать один центральный middleware обработки ошибок, форматирующий каждую ошибку одинаково,
- выбирать корректные HTTP-коды статуса и согласованную форму JSON для ошибок.
1. Две разные задачи
Их часто объединяют, но они решают разные проблемы:
- Валидация — проактивна. Прежде чем обращаться к базе данных или выполнять бизнес-логику, вы проверяете, что ввод имеет правильную форму — нужные поля, нужные типы, разумные значения. Плохой ввод немедленно отклоняется с
400 Bad Request. - Обработка ошибок — реактивна. Даже с идеальным вводом бывают сбои: база недоступна, файл отсутствует, сторонний API не отвечает. Обработка ошибок решает, что увидит клиент, когда это случится.
Аналогия. Валидация — это охранник у двери, проверяющий документы: неверный документ — вас не пустят. Обработка ошибок — это аптечка внутри: что бы ни случилось, когда вы уже внутри, есть спокойная стандартная процедура вместо паники. Нужны обе.
Золотое правило, связывающее их: никогда не доверяйте вводу и никогда не позволяйте необработанной ошибке дойти до пользователя как сырое падение.