使用Dancer中的Hook修改异常处理

时间:2012-10-18 20:29:20

标签: perl exception-handling dancer

我正在尝试设置一个钩子来捕获从我的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而不是返回来停止对异常的任何进一步处理,但它没有改变任何东西。

我如何通过Dancer实现这一目标?感谢。

2 个答案:

答案 0 :(得分:2)

使用“on_route_exception”挂钩代替......

hook on_route_exception => sub
{
    my ( $exception ) = @_;
    error( $exception );
    status( 'error' );
    halt( { errors => [ { message => 'An unhandled exception occurred', code => 0 } ] } );
};

答案 1 :(得分: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方法的

可以帮助您。