如何在 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.
}