Take a look at this Advent Calendar blog post
<https://mojolicious.io/blog/2018/12/24/async-await-the-mojo-way/>.
Specifically, "Web Apps" at the bottom.

On Thu, Feb 7, 2019 at 11:57 AM Ron Bergin <rkber...@gmail.com> wrote:

> Note: I cross posted this question on perlmonks
> https://perlmonks.org/?node_id=1229558
>
> On Thursday, February 7, 2019 at 9:48:20 AM UTC-8, Ron Bergin wrote:
>>
>> I'm brand new to Mojolicious and working on a lite script that goes to 75
>> urls and retrieves text in an h3 tag. I've worked up a working test script
>> that outputs to console and now I'm working on adjusting it to be a web app
>> but I can't seem to get the correct syntax to store/retrieve the data.
>> What am I doing wrong?
>>
>> #!/usr/bin/perl
>>
>> use Mojolicious::Lite;
>>
>> my @urls  = (
>>     'https://mojolicious.org',
>>     'https://metacpan.org',
>>     'https://perlmonks.org',
>>     'http://www.google.com',
>> );
>>
>> get '/titles' => sub {
>>     my $ua    = Mojo::UserAgent->new;
>>     my $async = Mojo::IOLoop::Delay->new;
>>
>>     $async->steps(
>>         sub {
>>             my $self = shift;
>>             $ua->get($_, $self->begin) for @urls;
>>         },
>>         sub {
>>             my ($self, @tx) = @_;
>>             my $titles      = [];
>>
>>             foreach (@tx) {
>>                 my $title  = '';
>>                 my $status = $_->res->is_success ? 'Connected' : $_->
>> error->{message};
>>
>>                 if ( $_->res->is_success ) {
>>                     $title = $_->res->dom->at('title')->text;
>>                     $title =~ s/^\s+|\s+$//g; # couldn't get Mojo::Util
>> trim function to work
>>                 }
>>
>>                 push @$titles, {host => $_->req->url->host, status =>
>> $status, title => $title};
>>             }
>>             $self->stash(titles => $titles);
>>         }
>>     );
>> } => 'titles';
>>
>> app->start;
>>
>> __DATA__
>>
>> @@ titles.html.ep
>> % layout 'titles';
>>
>> %= dumper stash('titles')
>>
>> <table border=1>
>> <tr>
>>   <th>Host</th>
>>   <th>Status</th>
>>   <th>Title</th>
>> </tr>
>>
>> <!-- % for my $server ( @{ stash('titles') } ) { -->
>> % for my $server ( stash('titles') ) {
>>   <tr>
>>     <td><%= $server->{host} %></td>
>>     <td><%= $server->{status} %></td>
>>     <td><%= $server->{title} =%></td>
>>   </tr>
>> % }
>> </table>
>>
>> @@ layouts/titles.html.ep
>> <!doctype html>
>>
>> <html>
>>
>> <head>
>>   <title>Titles</title>
>> </head>
>>
>> <body>
>> <h1>Titles</h1>
>> <%= content =%>
>> </body>
>>
>> </html>
>>
>>
>> Here's the output:
>>
>>> $ ./titles_web.pl get /titles
>>> [Thu Feb  7 09:45:54 2019] [debug] GET "/titles" (fcf21ce8)
>>> [Thu Feb  7 09:45:54 2019] [debug] Routing to a callback
>>> [Thu Feb  7 09:45:54 2019] [debug] Rendering template "titles.html.ep"
>>> from DATA section
>>> [Thu Feb  7 09:45:54 2019] [debug] Rendering template
>>> "layouts/titles.html.ep" from DATA section
>>> [Thu Feb  7 09:45:54 2019] [debug] 200 OK (0.00267s, 374.532/s)
>>> <!doctype html>
>>>
>>> <html>
>>>
>>> <head>
>>>   <title>Titles</title>
>>> </head>
>>>
>>> <body>
>>> <h1>Titles</h1>
>>>
>>> undef
>>>
>>>
>>> <table border=1>
>>> <tr>
>>>   <th>Host</th>
>>>   <th>Status</th>
>>>   <th>Title</th>
>>> </tr>
>>>
>>> <!-- % for my $server ( @{ stash('titles') } ) { -->
>>>   <tr>
>>>     <td></td>
>>>     <td></td>
>>>     <td></td>
>>> </tr>
>>> </table>
>>> </body>
>>>
>>> </html>
>>>
>>
>> --
> You received this message because you are subscribed to the Google Groups
> "Mojolicious" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to mojolicious+unsubscr...@googlegroups.com.
> To post to this group, send email to mojolicious@googlegroups.com.
> Visit this group at https://groups.google.com/group/mojolicious.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to mojolicious+unsubscr...@googlegroups.com.
To post to this group, send email to mojolicious@googlegroups.com.
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.

Reply via email to