NAME
Mojo::Transaction - Transaction base class
SYNOPSIS
package
Mojo::Transaction::MyTransaction;
sub
client_read {...}
sub
client_write {...}
sub
server_read {...}
sub
server_write {...}
DESCRIPTION
Mojo::Transaction is an abstract base class for transactions, like Mojo::Transaction::HTTP and Mojo::Transaction::WebSocket.
EVENTS
Mojo::Transaction inherits all events from Mojo::EventEmitter and can emit the following new ones.
connection
$tx
->on(
connection
=>
sub
(
$tx
,
$connection
) {...});
Emitted when a connection has been assigned to transaction.
finish
$tx
->on(
finish
=>
sub
(
$tx
) {...});
Emitted when transaction is finished.
ATTRIBUTES
Mojo::Transaction implements the following attributes.
kept_alive
my
$bool
=
$tx
->kept_alive;
$tx
=
$tx
->kept_alive(
$bool
);
Connection has been kept alive.
local_address
my
$address
=
$tx
->local_address;
$tx
=
$tx
->local_address(
'127.0.0.1'
);
Local interface address.
local_port
my
$port
=
$tx
->local_port;
$tx
=
$tx
->local_port(8080);
Local interface port.
original_remote_address
my
$address
=
$tx
->original_remote_address;
$tx
=
$tx
->original_remote_address(
'127.0.0.1'
);
Remote interface address.
remote_port
my
$port
=
$tx
->remote_port;
$tx
=
$tx
->remote_port(8081);
Remote interface port.
req
my
$req
=
$tx
->req;
$tx
=
$tx
->req(Mojo::Message::Request->new);
HTTP request, defaults to a Mojo::Message::Request object.
# Access request information
my
$method
=
$tx
->req->method;
my
$url
=
$tx
->req->url->to_abs;
my
$info
=
$tx
->req->url->to_abs->userinfo;
my
$host
=
$tx
->req->url->to_abs->host;
my
$agent
=
$tx
->req->headers->user_agent;
my
$custom
=
$tx
->req->headers->header(
'Custom-Header'
);
my
$bytes
=
$tx
->req->body;
my
$str
=
$tx
->req->text;
my
$hash
=
$tx
->req->params->to_hash;
my
$all
=
$tx
->req->uploads;
my
$value
=
$tx
->req->json;
my
$foo
=
$tx
->req->json(
'/23/foo'
);
my
$dom
=
$tx
->req->dom;
my
$bar
=
$tx
->req->dom(
'div.bar'
)->first->text;
res
my
$res
=
$tx
->res;
$tx
=
$tx
->res(Mojo::Message::Response->new);
HTTP response, defaults to a Mojo::Message::Response object.
# Access response information
my
$code
=
$tx
->res->code;
my
$message
=
$tx
->res->message;
my
$server
=
$tx
->res->headers->server;
my
$custom
=
$tx
->res->headers->header(
'Custom-Header'
);
my
$bytes
=
$tx
->res->body;
my
$str
=
$tx
->res->text;
my
$value
=
$tx
->res->json;
my
$foo
=
$tx
->res->json(
'/23/foo'
);
my
$dom
=
$tx
->res->dom;
my
$bar
=
$tx
->res->dom(
'div.bar'
)->first->text;
METHODS
Mojo::Transaction inherits all methods from Mojo::EventEmitter and implements the following new ones.
client_read
$tx
->client_read(
$bytes
);
Read data client-side, used to implement user agents such as Mojo::UserAgent. Meant to be overloaded in a subclass.
client_write
my
$bytes
=
$tx
->client_write;
Write data client-side, used to implement user agents such as Mojo::UserAgent. Meant to be overloaded in a subclass.
closed
$tx
=
$tx
->closed;
Same as "completed", but also indicates that all transaction data has been sent.
completed
$tx
=
$tx
->completed;
Low-level method to finalize transaction.
connection
my
$id
=
$tx
->connection;
$tx
=
$tx
->connection(
$id
);
Connection identifier.
error
my
$err
=
$tx
->error;
Get request or response error and return undef
if there is no error.
# Longer version
my
$err
=
$tx
->req->error ||
$tx
->res->error;
# Check for 4xx/5xx response and connection errors
if
(
my
$err
=
$tx
->error) {
die
"$err->{code} response: $err->{message}"
if
$err
->{code};
die
"Connection error: $err->{message}"
;
}
is_finished
my
$bool
=
$tx
->is_finished;
Check if transaction is finished.
is_websocket
my
$bool
=
$tx
->is_websocket;
False, this is not a Mojo::Transaction::WebSocket object.
remote_address
my
$address
=
$tx
->remote_address;
$tx
=
$tx
->remote_address(
'127.0.0.1'
);
Same as "original_remote_address" or the last value of the X-Forwarded-For
header if "req" has been performed through a reverse proxy.
result
my
$res
=
$tx
->result;
Returns the Mojo::Message::Response object from "res" or dies if a connection error has occurred.
# Fine grained response handling (dies on connection errors)
my
$res
=
$tx
->result;
if
(
$res
->is_success) {
say
$res
->body }
elsif
(
$res
->is_error) {
say
$res
->message }
elsif
(
$res
->code == 301) {
say
$res
->headers->location }
else
{
say
'Whatever...'
}
server_read
$tx
->server_read(
$bytes
);
Read data server-side, used to implement web servers such as Mojo::Server::Daemon. Meant to be overloaded in a subclass.
server_write
my
$bytes
=
$tx
->server_write;
Write data server-side, used to implement web servers such as Mojo::Server::Daemon. Meant to be overloaded in a subclass.