3

我正在尝试设置一个挂钩来捕获从我的 Dancer 应用程序(API)抛出的所有异常和错误,并将它们传递给设置 HTTP 状态代码并返回哈希(序列化为 JSON)的函数。

当我使用 try/catch 时一切正常,但是当我将它移动到钩子时,它会运行代码,但响应是使用默认错误机制而不是我的函数形成的。

这是我正在使用的钩子:

# Handle errors
hook on_handler_exception => sub {
    my $e = shift;
    debug "ON HANDLER EXCEPTION";
    return API::Exception->handle($e); # sets status code and returns hash depending on the exception
};

我还尝试使用halt而不是 return 来停止对异常的任何进一步处理,但它没有改变任何东西。

我将如何使用 Dancer 完成此任务?谢谢。

4

2 回答 2

2

改用“on_route_exception”钩子......

hook on_route_exception => sub
{
    my ( $exception ) = @_;
    error( $exception );
    status( 'error' );
    halt( { errors => [ { message => 'An unhandled exception occurred', code => 0 } ] } );
};
于 2013-11-11T00:52:57.730 回答
0

看看Dancer::Error的代码。

我想像

my $content = Dancer::Engine->engine("template")->apply_renderer($template_name, $ops);
    return Dancer::Response->new(
        status => $self->code,
        headers => ['Content-Type' => 'text/html'],
        content => $content);

_render_html方法可以帮助你。

于 2013-02-05T15:31:21.783 回答