fix: prevent double-rendering in async route handlers

This commit is contained in:
2025-12-28 17:29:10 +01:00
parent 40b848eeee
commit 64a9db7324

View File

@@ -38,11 +38,13 @@ sub startup {
$c->render_later; $c->render_later;
$c->db->ping->then( $c->db->ping->then(
sub { sub {
return if $c->stash->{rendered};
$c->render( json => { status => 'ok' } ); $c->render( json => { status => 'ok' } );
} }
)->catch( )->catch(
sub { sub {
my $err = shift; my $err = shift;
return if $c->stash->{rendered};
$c->app->log->error("Health check DB error: $err"); $c->app->log->error("Health check DB error: $err");
$c->render( $c->render(
json => { json => {
@@ -98,9 +100,10 @@ sub startup {
return; return;
} }
$url_service->get_original_url($short_code)->then( return $url_service->get_original_url($short_code)->then(
sub { sub {
my $original_url = shift; my $original_url = shift;
return if $c->stash->{rendered};
if ($original_url) { if ($original_url) {
$c->redirect_to($original_url); $c->redirect_to($original_url);
} }
@@ -114,6 +117,7 @@ sub startup {
)->catch( )->catch(
sub { sub {
my $err = shift; my $err = shift;
return if $c->stash->{rendered};
$c->app->log->error("Redirect lookup error: $err"); $c->app->log->error("Redirect lookup error: $err");
$c->render( $c->render(
json => { error => 'Internal server error' }, json => { error => 'Internal server error' },