|
|
|
@ -1,10 +1,11 @@
|
|
|
|
#!/usr/bin/env perl
|
|
|
|
#!/usr/bin/env perl
|
|
|
|
use warnings;
|
|
|
|
use warnings;
|
|
|
|
use 5.0.26;
|
|
|
|
use strict;
|
|
|
|
use FindBin;
|
|
|
|
use FindBin;
|
|
|
|
use Plack::MIME;
|
|
|
|
use Plack::MIME;
|
|
|
|
use Plack::Builder qw/builder enable mount/;
|
|
|
|
use Plack::Builder qw/builder enable mount/;
|
|
|
|
use Plack::App::Directory ();
|
|
|
|
use Plack::App::Directory ();
|
|
|
|
|
|
|
|
use Cpanel::JSON::XS qw/decode_json encode_json/;
|
|
|
|
|
|
|
|
|
|
|
|
# Demo Plack server for WebPerl
|
|
|
|
# Demo Plack server for WebPerl
|
|
|
|
# run me with "plackup webperl.psgi"
|
|
|
|
# run me with "plackup webperl.psgi"
|
|
|
|
@ -21,11 +22,30 @@ Plack::MIME->add_type(".wasm" => "application/wasm");
|
|
|
|
|
|
|
|
|
|
|
|
my $SERV_ROOT = $FindBin::Bin;
|
|
|
|
my $SERV_ROOT = $FindBin::Bin;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
my $app_ajaxtest = sub {
|
|
|
|
|
|
|
|
my $req = Plack::Request->new(shift);
|
|
|
|
|
|
|
|
my $rv = eval {
|
|
|
|
|
|
|
|
my $content = decode_json( $req->content );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# We can do anything we like here, like e.g. call Perl subs,
|
|
|
|
|
|
|
|
# read/write files on the server, etc. - for this demo we're
|
|
|
|
|
|
|
|
# just going to munge some data from the request.
|
|
|
|
|
|
|
|
$content->{hello} .= "The server says hello!\n";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$content; # return value from eval (must be a true value)
|
|
|
|
|
|
|
|
}; my $e = $@||'unknown error';
|
|
|
|
|
|
|
|
my $res = $req->new_response($rv ? 200 : 500);
|
|
|
|
|
|
|
|
$res->content_type($rv ? 'application/json' : 'text/plain');
|
|
|
|
|
|
|
|
$res->body($rv ? encode_json($rv) : 'Server Error: '.$e);
|
|
|
|
|
|
|
|
return $res->finalize;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
builder {
|
|
|
|
builder {
|
|
|
|
enable 'SimpleLogger';
|
|
|
|
enable 'SimpleLogger';
|
|
|
|
enable 'Static',
|
|
|
|
enable 'Static',
|
|
|
|
path => qr/\.(?:html?|js|css|data|mem|wasm|pl)\z/i,
|
|
|
|
path => qr/\.(?:html?|js|css|data|mem|wasm|pl)\z/i,
|
|
|
|
root => $SERV_ROOT;
|
|
|
|
root => $SERV_ROOT;
|
|
|
|
Plack::App::Directory->new({root=>$SERV_ROOT})->to_app;
|
|
|
|
mount '/' => Plack::App::Directory->new({root=>$SERV_ROOT})->to_app;
|
|
|
|
|
|
|
|
mount '/ajaxtest' => $app_ajaxtest;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|