我正在尝试设置一个钩子来捕获从我的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实现这一目标?感谢。
答案 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
方法的可以帮助您。