HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-26
1 - <p>Разговор о мидлварах был бы не полным, если бы мы не обсудили обработку ошибок. Если запрашиваемый урл соответствует одному из определённых маршрутов Express, то вызывается соответствующий обработчик (как теперь мы знаем - мидлвара). Но ведь к сайтам можно обращаться по любому адресу, даже такому, который в роутинге не описан. С точки зрения HTTP такая ситуация должна привдить к ошибке 404 и, возможно, ответом будет специальная страница.</p>
1 + <p>Разговор о мидлварах был бы не полным, если бы мы не обсудили обработку ошибок. Если запрашиваемый урл соответствует одному из определённых маршрутов Express, то вызывается соответствующий обработчик (как теперь мы знаем - мидлвара). Но ведь к сайтам можно обращаться по любому адресу, даже такому, который в роутинге не описан. С точки зрения HTTP такая ситуация должна приводить к ошибке 404 и, возможно, ответом будет специальная страница.</p>
2 <p>Для реализации подобного поведения не нужны специальные механизмы. Всё, что нужно для этого, мы уже изучили. Если хорошо подумать, то можно дойти до мысли, что 404 - это ситуация, при которой Express не смог сопоставить ни один маршрут с запрошенным адресом, а значит мы можем определить мидлвару после определения всех маршрутов. Эта мидлвара и будет обработчиком ситуации 404.</p>
2 <p>Для реализации подобного поведения не нужны специальные механизмы. Всё, что нужно для этого, мы уже изучили. Если хорошо подумать, то можно дойти до мысли, что 404 - это ситуация, при которой Express не смог сопоставить ни один маршрут с запрошенным адресом, а значит мы можем определить мидлвару после определения всех маршрутов. Эта мидлвара и будет обработчиком ситуации 404.</p>
3 <p>С этой точки зрения всё отлично, но часто возникает потребность вернуть ответ 404 даже в том случае, если маршрут был найден. Такое происходит, например, при обращении к удалённому/несуществующему ресурсу:<em>/users/5</em>.</p>
3 <p>С этой точки зрения всё отлично, но часто возникает потребность вернуть ответ 404 даже в том случае, если маршрут был найден. Такое происходит, например, при обращении к удалённому/несуществующему ресурсу:<em>/users/5</em>.</p>
4 <p>Интуиция подсказывает нам, что мы должны каким-то образом передать управление дальше, но не следующей по списку мидлваре, а мидлваре, отвечающей за ошибки. И это, действительно, делается так:</p>
4 <p>Интуиция подсказывает нам, что мы должны каким-то образом передать управление дальше, но не следующей по списку мидлваре, а мидлваре, отвечающей за ошибки. И это, действительно, делается так:</p>
5 <p>В данном примере, в отличие от всего, что мы видели раньше, в next() передаётся ошибка. Это приводит к изменению поведения вызова последующих мидлвар. Все обычные мидлвары будут пропущены, а те, которые предназначены для обработки ошибок, будут вызваны.</p>
5 <p>В данном примере, в отличие от всего, что мы видели раньше, в next() передаётся ошибка. Это приводит к изменению поведения вызова последующих мидлвар. Все обычные мидлвары будут пропущены, а те, которые предназначены для обработки ошибок, будут вызваны.</p>
6 <p>Мидлвары для обработки ошибок отличаются от обычных тем, что они принимают на вход четыре параметра, а первый, при этом - ошибка, полученная от предыдущей мидлвары. Express сам внутри себя определяет, что это мидлвара для обработки ошибок. Делается это посредством проверки количества аргументов у функции после вызова use.</p>
6 <p>Мидлвары для обработки ошибок отличаются от обычных тем, что они принимают на вход четыре параметра, а первый, при этом - ошибка, полученная от предыдущей мидлвары. Express сам внутри себя определяет, что это мидлвара для обработки ошибок. Делается это посредством проверки количества аргументов у функции после вызова use.</p>