如何在 Raku Cro 应用程序中实现全局异常处理

use*_*651 10 cro raku

我正在使用一个相当大的 Cro 应用程序,其中包含数十条路线、模型和其他逻辑。目前每个路由块中都有一个CATCH处理异常的方法。这对维护来说不太友好,更不用说添加它们的工作了。所以,我想知道这是否是更好的方法。主路由块中的一个CATCH处理程序不起作用。异常仅在抛出异常的路由块中捕获。可能是线程问题。是否有一个地方可以实现一个异常处理程序,它可以获取所有异常并可以在不导致应用程序终止的情况下处理它们?

Jon*_*ton 13

您可以使用块around中的函数route来指定包装所有路由处理程序的内容。的文档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.
}
Run Code Online (Sandbox Code Playgroud)