10

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

4

1 回答 1

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.
}
于 2021-09-30T09:48:26.713 回答