we've had this issue for a while since we run REST services and webapp out of same code base.

We do this:

hook before_error_init => sub {
    my $err_obj = shift;

    if ( request->path !~ m{^/api/} && ( my $ser = setting('serializer') ) ) {
        set 'serializer', undef;
        $err_obj->{_save_serializer} = $ser;
    }
};

And then restore it:

hook after_error_render => sub {
    my $response = shift;
    my $err_obj  = vars->{_save_err_obj};

    if ( my $ser = delete $err_obj->{_save_serializer} ) {
        set 'serializer', $ser;
    }
};

I could see adding a config option to only do this in dev or test environments since i'd guess in production, you would want to log the error in JSON. 

HTH,

Lee




On Fri, Mar 14, 2014 at 5:20 AM, David Precious <davidp@preshweb.co.uk> wrote:
On Thu, 13 Mar 2014 18:57:04 -0600
Warren Young <warren@etr-usa.com> wrote:

> Apparently you cannot have both
>
>     serializer: "JSON"
>     show_errors: 1
>
> in your config.yml.  Enabling the automatic JSON serializer defeats
> the error screen, returning the exception error object as JSON to the
> client:
<snip>

You could argue that's correct and desired behaviour - if you have set
serialiser: "JSON", you are, presumably, writing an API, which will be
used by API consumers expecting JSON.  Suddenly dumping a HTML error
page at them instead of the JSON they were expecting would be silly and
wrong - returning JSON describing the error seems much more sane.

So, I wouldn't say it breaks the error page, I'd say it's logical
behaviour.

If you don't want it, though, you could probably get round it with
Yanick's suggestion of using before_serializer.


--
David Precious ("bigpresh") <davidp@preshweb.co.uk>
http://www.preshweb.co.uk/     www.preshweb.co.uk/twitter
www.preshweb.co.uk/linkedin    www.preshweb.co.uk/facebook
www.preshweb.co.uk/cpan        www.preshweb.co.uk/github


_______________________________________________
dancer-users mailing list
dancer-users@dancer.pm
http://lists.preshweb.co.uk/mailman/listinfo/dancer-users