1
0
Fork 0
mirror of https://github.com/actix/actix-web.git synced 2024-06-12 18:29:34 +00:00

tweak err handlers docs

This commit is contained in:
Rob Ede 2023-02-26 13:28:15 +00:00
parent e97329eb2a
commit 8d5d6a2598
No known key found for this signature in database
GPG key ID: 97C636207D3EF933

View file

@ -50,18 +50,24 @@ type DefaultHandler<B> = Option<Rc<ErrorHandler<B>>>;
/// will pass by unchanged by this middleware. /// will pass by unchanged by this middleware.
/// ///
/// # Examples /// # Examples
/// ## Handler Response ///
/// Header /// Adding a header:
///
/// ``` /// ```
/// use actix_web::http::{header, StatusCode}; /// use actix_web::{
/// use actix_web::middleware::{ErrorHandlerResponse, ErrorHandlers}; /// dev::ServiceResponse,
/// use actix_web::{dev, web, App, HttpResponse, Result}; /// http::{header, StatusCode},
/// middleware::{ErrorHandlerResponse, ErrorHandlers},
/// web, App, HttpResponse, Result,
/// };
/// ///
/// fn add_error_header<B>(mut res: dev::ServiceResponse<B>) -> Result<ErrorHandlerResponse<B>> { /// fn add_error_header<B>(mut res: dev::ServiceResponse<B>) -> Result<ErrorHandlerResponse<B>> {
/// res.response_mut().headers_mut().insert( /// res.response_mut().headers_mut().insert(
/// header::CONTENT_TYPE, /// header::CONTENT_TYPE,
/// header::HeaderValue::from_static("Error"), /// header::HeaderValue::from_static("Error"),
/// ); /// );
///
/// // body is unchanged, map to "left" slot
/// Ok(ErrorHandlerResponse::Response(res.map_into_left_body())) /// Ok(ErrorHandlerResponse::Response(res.map_into_left_body()))
/// } /// }
/// ///
@ -70,37 +76,52 @@ type DefaultHandler<B> = Option<Rc<ErrorHandler<B>>>;
/// .service(web::resource("/").route(web::get().to(HttpResponse::InternalServerError))); /// .service(web::resource("/").route(web::get().to(HttpResponse::InternalServerError)));
/// ``` /// ```
/// ///
/// Body Content /// Modifying response body:
///
/// ``` /// ```
/// use actix_web::http::{header, StatusCode}; /// use actix_web::{
/// use actix_web::middleware::{ErrorHandlerResponse, ErrorHandlers}; /// dev::ServiceResponse,
/// use actix_web::{dev, web, App, HttpResponse, Result}; /// http::{header, StatusCode},
/// fn add_error_body<B>(res: dev::ServiceResponse<B>) -> Result<ErrorHandlerResponse<B>> { /// middleware::{ErrorHandlerResponse, ErrorHandlers},
/// // Get the error message and status code /// web, App, HttpResponse, Result,
/// let error_message = "An error occurred"; /// };
/// // Destructures ServiceResponse into request and response components ///
/// let (req, res) = res.into_parts(); /// fn add_error_body<B>(res: ServiceResponse<B>) -> Result<ErrorHandlerResponse<B>> {
/// // Create a new response with the modified body /// // split service response into request and response components
/// let res = res.set_body(error_message).map_into_boxed_body(); /// let (req, res) = res.into_parts();
/// // Create a new ServiceResponse with the modified response ///
/// let res = dev::ServiceResponse::new(req, res).map_into_right_body(); /// // set body of response to modified body
/// Ok(ErrorHandlerResponse::Response(res)) /// let res = res.set_body("An error occurred.");
///} ///
/// // modified bodies need to be boxed and placed in the "right" slot
/// let res = ServiceResponse::new(req, res)
/// .map_into_boxed_body()
/// .map_into_right_body();
///
/// Ok(ErrorHandlerResponse::Response(res))
/// }
/// ///
/// let app = App::new() /// let app = App::new()
/// .wrap(ErrorHandlers::new().handler(StatusCode::INTERNAL_SERVER_ERROR, add_error_body)) /// .wrap(ErrorHandlers::new().handler(StatusCode::INTERNAL_SERVER_ERROR, add_error_body))
/// .service(web::resource("/").route(web::get().to(HttpResponse::InternalServerError))); /// .service(web::resource("/").route(web::get().to(HttpResponse::InternalServerError)));
/// ``` /// ```
/// ## Registering default handler ///
/// Registering default handler:
///
/// ``` /// ```
/// # use actix_web::http::{header, StatusCode}; /// # use actix_web::{
/// # use actix_web::middleware::{ErrorHandlerResponse, ErrorHandlers}; /// # dev::ServiceResponse,
/// # use actix_web::{dev, web, App, HttpResponse, Result}; /// # http::{header, StatusCode},
/// # middleware::{ErrorHandlerResponse, ErrorHandlers},
/// # web, App, HttpResponse, Result,
/// # };
/// fn add_error_header<B>(mut res: dev::ServiceResponse<B>) -> Result<ErrorHandlerResponse<B>> { /// fn add_error_header<B>(mut res: dev::ServiceResponse<B>) -> Result<ErrorHandlerResponse<B>> {
/// res.response_mut().headers_mut().insert( /// res.response_mut().headers_mut().insert(
/// header::CONTENT_TYPE, /// header::CONTENT_TYPE,
/// header::HeaderValue::from_static("Error"), /// header::HeaderValue::from_static("Error"),
/// ); /// );
///
/// // body is unchanged, map to "left" slot
/// Ok(ErrorHandlerResponse::Response(res.map_into_left_body())) /// Ok(ErrorHandlerResponse::Response(res.map_into_left_body()))
/// } /// }
/// ///
@ -109,6 +130,8 @@ type DefaultHandler<B> = Option<Rc<ErrorHandler<B>>>;
/// header::CONTENT_TYPE, /// header::CONTENT_TYPE,
/// header::HeaderValue::from_static("Bad Request Error"), /// header::HeaderValue::from_static("Bad Request Error"),
/// ); /// );
///
/// // body is unchanged, map to "left" slot
/// Ok(ErrorHandlerResponse::Response(res.map_into_left_body())) /// Ok(ErrorHandlerResponse::Response(res.map_into_left_body()))
/// } /// }
/// ///
@ -122,9 +145,10 @@ type DefaultHandler<B> = Option<Rc<ErrorHandler<B>>>;
/// ) /// )
/// .service(web::resource("/").route(web::get().to(HttpResponse::InternalServerError))); /// .service(web::resource("/").route(web::get().to(HttpResponse::InternalServerError)));
/// ``` /// ```
/// Alternatively, you can set default handlers for only client or only server errors:
/// ///
/// ```rust /// You can set default handlers for all client (4xx) or all server (5xx) errors:
///
/// ```
/// # use actix_web::http::{header, StatusCode}; /// # use actix_web::http::{header, StatusCode};
/// # use actix_web::middleware::{ErrorHandlerResponse, ErrorHandlers}; /// # use actix_web::middleware::{ErrorHandlerResponse, ErrorHandlers};
/// # use actix_web::{dev, web, App, HttpResponse, Result}; /// # use actix_web::{dev, web, App, HttpResponse, Result};