pub struct Catcher {
pub code: u16,
// some fields omitted
}
An error catching route.
Catchers are routes that run when errors occur. They correspond directly
with the HTTP error status code they will be handling and are registered
with Rocket via the Rocket::catch
method. For example, to handle "404 not found" errors, a catcher for the
"404" status code is registered.
Because error handlers are only called when all routes are exhausted, they
should not fail nor forward. If an error catcher fails, the user will
receive no response. If an error catcher forwards, Rocket will respond with
an internal server error.
Rocket has many built-in, pre-registered default catchers. In particular,
Rocket has catchers for all of the following status codes: 400, 401, 402,
403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417,
418, 421, 426, 428, 429, 431, 451, 500, 501, 503, and 510. As such, catchers
only need to be registered if an error needs to be handled in a custom
fashion.
Catchers should rarely be used directly. Instead, they are typically
declared using the catch
decorator, as follows:
#![feature(plugin)]
#![plugin(rocket_codegen)]
extern crate rocket;
use rocket::Request;
#[catch(500)]
fn internal_error() -> &'static str {
"Whoops! Looks like we messed up."
}
#[catch(400)]
fn not_found(req: &Request) -> String {
format!("I couldn't find '{}'. Try something else?", req.uri())
}
fn main() {
rocket::ignite().catch(catchers![internal_error, not_found]).launch();
}
A function decorated with catch
can take in 0, 1, or 2 parameters:
Error
, &Request
, or both, as desired.
The HTTP status code to match against.
Creates a catcher for the given status code using the given error
handler. This should only be used when routing manually.
use rocket::{Catcher, Request, Error};
use rocket::response::{Result, Responder};
use rocket::response::status::Custom;
use rocket::http::Status;
fn handle_404<'r>(_: Error, req: &'r Request) -> Result<'r> {
let res = Custom(Status::NotFound, format!("404: {}", req.uri()));
res.respond_to(req)
}
fn handle_500<'r>(_: Error, req: &'r Request) -> Result<'r> {
"Whoops, we messed up!".respond_to(req)
}
let not_found_catcher = Catcher::new(404, handle_404);
let internal_server_error_catcher = Catcher::new(500, handle_500);
Formats the value using the given formatter. Read more
Converts the given value to a String
. Read more
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)
Immutably borrows from an owned value. Read more
🔬 This is a nightly-only experimental API. (get_type_id
)
this method will likely be replaced by an associated static
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)
Mutably borrows from an owned value. Read more
Get the TypeId
of this object.