NAME
Plack::Middleware - Base class for easy-to-use PSGI middleware
SYNOPSIS
package Plack::Middleware::Foo;
use parent qw( Plack::Middleware );
sub call {
my($self, $env) = @_;
# Do something with $env
# $self->app is the original app
my $res = $self->app->($env);
# Do something with $res
return $res;
}
# then in app.psgi
use Plack::Builder;
my $app = sub { ... } # as usual
builder {
enable "Plack::Middleware::Foo";
enable "Plack::Middleware::Bar", %options;
$app;
};
DESCRIPTION
Plack::Middleware is a utility base class to write PSGI middleware. All you have to do is to inherit from Plack::Middleware and then implement the callback call
method (or to_app
method that would return the PSGI code reference) to do the actual work. You can use $self->app
to call the original (wrapped) application.
Your middleware object is created at a PSGI application compile time and is persistent during the web server life cycle (unless it is a non-persisten environment such as CGI), so you should never set or cache per-request data like $env
in your middleware object. See also "OBJECT LIFECYCLE" in Plack::Component.
See Plack::Builder how to actually enable middlewares in your .psgi application file using the DSL. If you do not like our builder DSL, you can also use wrap
method to wrap your application with a middleware:
use Plack::Middleware::Foo;
my $app = sub { ... };
$app = Plack::Middleware::Foo->wrap($app, %options);
$app = Plack::Middleware::Bar->wrap($app, %options);