Hi, Thanks for using exceptions :) I'm having a look at this issue. There is indeed a "catch all" mechanism to produce a Dancer::halt in case of any issue in hooks. I'll make it more flexible. On 28 February 2012 05:22, Rusty Conover <rconover@infogears.com> wrote:
Hi Everyone,
I'm trying to use a hook like:
register_exception('DatabaseProblem', message_pattern => "Database problem: %s");
hook 'database_error' => sub { my $message = Carp::longmess($_[0]); my $handle = shift; raise DatabaseProblem => $message; return; };
This is documented in Dancer::Plugin::Database.
To raise a DatabaseProblem exception in the event of a database error such as:
my $dbh = database(); try { $dbh->do("insert into table_that_does_not_exist values(?)", undef, "yes"); } catch { my ($exception) = @_; if ($exception->does('DatabaseProblem') { # do something } };
The problem I'm getting is:
An error occured while executing the filter named database_error:
It seems we can't raise an exception in the database_error hook or any hook really, without having it generate a 500 error because Dancer::Hook catches all exceptions thrown in hooks and halts rendering.
Relevant excerpt from Hook.pm:
my $compiled_filter = sub { my @arguments = @_; return if Dancer::SharedData->response->halted;
my $app = Dancer::App->current(); return unless $properties->should_run_this_app($app->name);
Dancer::Logger::core( "entering " . $hook_name . " hook" );
try { $code->(@arguments) } catch { my ($exception) = @_; # exception is not a workflow continuation but a genuine error my $err = Dancer::Error->new( code => 500, title => $hook_name . ' filter error', message => "An error occured while executing the filter named $hook_name: $exception", exception => $exception, ); # raise a new halt exception Dancer::halt( $err->render ); }; };
Can we change this so exceptions can be raised from hooks, or is there another pattern I should be using to catch DBI errors?
Many thanks,
Rusty -- InfoGears Inc. http://www.infogears.com http://www.gearbuyer.com
_______________________________________________ Dancer-users mailing list Dancer-users@perldancer.org http://www.backup-manager.org/cgi-bin/listinfo/dancer-users