Here's one module we're going to use in the future for all exceptions in Dancer2: Throwable::Error (and its role: Throwable).
On Thu, Nov 20, 2014 at 7:16 PM, Andrew Beverley <[email protected]> wrote: > On Thu, 2014-11-20 at 13:29 +0200, WK wrote: > > So I have simple question: how and where to catch errors in Dancer > > app? > > As Ovid says, there are many ways to approach the problem. This is mine. > > I use Log::Report, which has the advantage of doing translations and > logging, as well as handling exceptions. For errors, it provides various > levels ("error", "warn", "info" etc). > > Log::Report provides one or more dispatchers, which can be configured to > filter on the severity of the error message. A dispatcher can be a > callback, so I configure multiple dispatchers for different types of > messages. > > If it's a user error then that will be displayed to the web page, and > depending on the severity I'll either allow the route to continue or > stop it there. Otherwise I'll log it to the system, which I plan to do > with errbit in the future. > > Whenever I call a function in my controller, I wrap it in my own eval > equivalent: > > process(sub {...}) > > This function does the work, and if it's fatal (including for a user > error) it stops the route and displays the error. > > sub process > { > my $coderef = shift; > try {&$coderef}; > $@->reportFatal(to => 'error_handler', is_fatal => 0); > $@ ? 0 : 1; # Return true on success > } > > In terms of exceptions that I wasn't expecting (e.g. unable to connect > to the database), I catch all of these using the init_error hook: > > hook init_error => sub { > my $error = shift; > panic $error->{exception}; > }; > > This works, but it's a bit messy, so I'd like to find a better way of > doing it. > > That's it in short. I hope to write it all up at some point and/or > create a plugin, but feel free to ask questions in the meantime. > > Andy > > > _______________________________________________ > dancer-users mailing list > [email protected] > http://lists.preshweb.co.uk/mailman/listinfo/dancer-users >
_______________________________________________ dancer-users mailing list [email protected] http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
