如何在 Raku Cro 应用程序中实现全局异常处理
How to implement a global exception handling in Raku Cro Application
我正在使用一个相当大的 Cro 应用程序,其中包含许多路线、模型和其他逻辑。目前在每个路由块中都有一个 CATCH
来处理异常。这对维护并不友好,更不用说添加它们的工作了。
所以,我想知道这是否是更好的方法。主路由块中的一个 CATCH
处理程序不起作用。异常仅在抛出它们的路由块中被捕获。可能是线程问题。
有没有一个地方我可以实现一个异常处理程序,它获取所有异常并可以处理它们而不会导致应用程序死机?
您可以在 route
块中使用 around
函数来指定环绕所有路由处理程序的内容。 documentation of around
给出了使用它来处理 route
块中所有路由处理程序抛出的异常的示例(为方便起见,此处重复):
my $application = route {
around -> &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.
}
我正在使用一个相当大的 Cro 应用程序,其中包含许多路线、模型和其他逻辑。目前在每个路由块中都有一个 CATCH
来处理异常。这对维护并不友好,更不用说添加它们的工作了。
所以,我想知道这是否是更好的方法。主路由块中的一个 CATCH
处理程序不起作用。异常仅在抛出它们的路由块中被捕获。可能是线程问题。
有没有一个地方我可以实现一个异常处理程序,它获取所有异常并可以处理它们而不会导致应用程序死机?
您可以在 route
块中使用 around
函数来指定环绕所有路由处理程序的内容。 documentation of around
给出了使用它来处理 route
块中所有路由处理程序抛出的异常的示例(为方便起见,此处重复):
my $application = route {
around -> &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.
}