#raku #cro
Вопрос:
Я работаю с довольно большим приложением Cro с десятками маршрутов, моделей и другой логики. На данный момент в каждом блоке маршрута есть CATCH
исключение для обработки. Это не очень удобно для обслуживания, не говоря уже о работе по их добавлению. Итак, мне было интересно, есть ли лучший способ сделать это. Один CATCH
обработчик в основном блоке маршрута не работает. Исключения перехватываются только в блоке маршрута, в котором они выбрасываются. Вероятно, проблема с потоковой передачей. Есть ли одно место, где я могу реализовать обработчик исключений, который получает все исключения и может обрабатывать их, не вызывая смерти приложения?
Ответ №1:
Вы можете использовать around
функцию в своем route
блоке, чтобы указать что-то, что охватывает все обработчики маршрутов. В документации around
приведен пример использования его для обработки исключений, создаваемых всеми обработчиками маршрутов в route
блоке (повторено здесь для удобства):
my $application = route {
around -> amp;handler {
# Invoke the route handler
handler();
CATCH {
# If any handler produces this exception...
when Some::Domain::Exception::UpdatingOldVersion {
# ...return a HTTP 409 Conflict response.
conflict;
}
}
}
# Put your get, post, etc. here.
}
Комментарии:
1. Большое спасибо, Джонатан!