get_service(ServeDir::new(".")).handle_error(|error: std::io::Error| async move { ( StatusCode::INTERNAL_SERVER_ERROR, format!("Unhandled internal error: {}", error), ) }), ) 这一段的意思是将当前目录设置为静态资源目录,用/static访问,当然这个.也可以换成绝对路径。 假设项目的结构如...
我们调用了axum::middleware::from_fn方法,这是我们之前所提到过的;它将我们的函数转换为一个真正的中间件,如下图所示,它用一个宏把我们的短短几行代码展开成了一个tower的Service。 现在我们再启动程序,刷新刚刚的页面,可以看到新的结果: 程序当前的代码如下: usestd::time::{self,SystemTime};useanyhow::Res...
1.安装tower_http板条箱 1.请使用axum::routing::get_service来提供构建SPA。
Axum 提供了强大的路由系统,支持参数捕获、多方法匹配等。例如:use axum::{Router, routing::{get, ...
"root".to_owned(),db_password:"password".to_owned(),db_port:3306,};letapp=Router::new().route("/hello",get(hello)).with_state(app_config);// run it with hyper on localhost:3000axum::Server::bind(&"0.0.0.0:3000".parse().unwrap()).serve(app.into_make_service()).await...
.layer(CorsLayer::new().allow_methods(axum::http::Method::GET).allow_origin(Any)));letaddr="0.0.0.0:8080";axum::Server::bind(&addr.parse().unwrap()).serve(app.into_make_service()).await.unwrap();}asyncfnindex_handler(req:Request<Body>)->String{ifrand::random(){sleep(Duration::...
服务(Service) axum是构筑在其他框架之上的框架,所以可以复用其他框架的一些特性,比如Tower里面的Service概念(一个trait),我们可以很简单的将实现了这个trait的对象注册到路由中。 useaxum::{body::Body,response::Response,routing::get,Router,http::Request,routing::any_service,};usestd::convert::Infallible;use...
我们调用了axum::middleware::from_fn方法,这是我们之前所提到过的;它将我们的函数转换为一个真正的中间件,如下图所示,它用一个宏把我们的短短几行代码展开成了一个tower的Service。 现在我们再启动程序,刷新刚刚的页面,可以看到新的结果: 程序当前的代码如下: ...
上面的例子和Express达到了相同的效果当向主页发出 GET 请求时,以 "前端柒八九"作为回应。 对于处理程序函数来说,它需要是一个axum::response::Response类型,或者实现axum::response::IntoResponse。这对于大多数基本类型(可以参考Rust 学习之数据类型[5]) ...
[tokio::main] async fn main() { let router = Router::new(); router.route("/", get(handler)); if true { // I need to check something here router.route("/other", get(handler)); } axum::Server::bind(&([127, 0, 0, 1], 3000).into()) .serve(router.into_make_service())...