### hello world
[dependencies] axum = "0.7.1" serde = { version = "1.0.193", features = ["derive"]} tera = "1.19.1" tokio = { version = "1.34.0", features = ["full"] }
use axum::{Router, routing::get}; #[tokio::main] async fn main() { let app = Router::new().route("/", get(|| async { "hello world" })); let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); axum::serve(listener, app).await.unwrap(); }
http://192.168.33.10:3000/
hello world
### templateの利用
templates/index.html
hello {{ name }}!
use axum::{Router, response::Html, routing::get}; use tera::{Context, Tera}; use serde::Serialize; #[derive(Serialize)] struct Index { name: String } #[tokio::main] async fn main() { let tera = match Tera::new("templates/**/*.html"){ Ok(t) => t, Err(e) => { println!("Parsing error(s): {}", e); ::std::process::exit(1); } }; let index = Index { name: String::from("test") }; let page = tera.render("index.html", &Context::from_serialize(&index).unwrap()).unwrap(); let app = Router::new().route("/", get(|| async move { Html(page.to_owned()) })); let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); axum::serve(listener, app).await.unwrap(); }
### with_state
use axum::{Router, extract::State, response::Html, routing::get}; use tera::{Context, Tera}; use serde::Serialize; #[derive(Serialize)] struct Index { name: String } #[derive(Clone)] struct ServiceState { tera: Tera, } async fn index(State(state): State<ServiceState>) -> Html<String> { let index = Index { name: String::from("test") }; let page = state.tera.render("index.html", &Context::from_serialize(&index).unwrap()).unwrap(); Html(page.to_owned()) } #[tokio::main] async fn main() { let tera = match Tera::new("templates/**/*.html"){ Ok(t) => t, Err(e) => { println!("Parsing error(s): {}", e); ::std::process::exit(1); } }; let app = Router::new() .route("/", get(index)) .with_state(ServiceState {tera}); let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); axum::serve(listener, app).await.unwrap(); }