From 50c2a5ceb05411a083234a73c97e3e7e53527f98 Mon Sep 17 00:00:00 2001 From: Nikolay Kim Date: Tue, 10 Apr 2018 14:45:03 -0700 Subject: [PATCH] update basic example --- examples/basics/src/main.rs | 36 ++++++++++------------------------ examples/static/actixLogo.png | Bin 8898 -> 13131 bytes 2 files changed, 10 insertions(+), 26 deletions(-) diff --git a/examples/basics/src/main.rs b/examples/basics/src/main.rs index c79cb4ad7..633f4823f 100644 --- a/examples/basics/src/main.rs +++ b/examples/basics/src/main.rs @@ -10,7 +10,7 @@ use futures::Stream; use std::{io, env}; use actix_web::{error, fs, pred, server, App, HttpRequest, HttpResponse, Result, Error}; -use actix_web::http::{Method, StatusCode}; +use actix_web::http::{header, Method, StatusCode}; use actix_web::middleware::{self, RequestSession}; use futures::future::{FutureResult, result}; @@ -40,36 +40,18 @@ fn index(mut req: HttpRequest) -> Result { req.session().set("counter", counter)?; } - // html - let html = format!(r#"actix - basics - -

Welcome

- session counter = {} - -"#, counter); // response Ok(HttpResponse::build(StatusCode::OK) - .content_type("text/html; charset=utf-8") - .body(&html)) + .content_type("text/html; charset=utf-8") + .body(include_str!("../static/welcome.html"))) } /// 404 handler -fn p404(req: HttpRequest) -> Result { - - // html - let html = r#"actix - basics - - back to home -

404

- -"#; - - // response - Ok(HttpResponse::build(StatusCode::NOT_FOUND) - .content_type("text/html; charset=utf-8") - .body(html)) +fn p404(req: HttpRequest) -> Result { + Ok(fs::NamedFile::open("./static/404.html")? + .set_status_code(StatusCode::NOT_FOUND)) } @@ -131,14 +113,16 @@ fn main() { // redirect .resource("/", |r| r.method(Method::GET).f(|req| { println!("{:?}", req); - HttpResponse::Found() - .header("LOCATION", "/index.html") + .header(header::LOCATION, "/index.html") .finish() })) // default .default_resource(|r| { + // 404 for GET request r.method(Method::GET).f(p404); + + // all requests that are not `GET` r.route().filter(pred::Not(pred::Get())).f( |req| HttpResponse::MethodNotAllowed()); })) diff --git a/examples/static/actixLogo.png b/examples/static/actixLogo.png index 142e4e8d57704b6779d54f979dcf50764906d9fe..1e2509a75a75b950e331348b1241e077cbaa3222 100644 GIT binary patch literal 13131 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 literal 8898 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