ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

actix-web提供公共router path

actix-web提供公共router path 在 actix-web 中公共 router path / 公共路由前缀通常用web::scope()实现。web::scope(/公共前缀)会把里面所有路由都加上这个前缀适合做模块分组比如/api/v1/users、/api/v1/orders。基础示例use actix_web::{web, App, HttpResponse, HttpServer}; async fn list_users() - HttpResponse { HttpResponse::Ok().body(用户列表) } async fn get_user(path: web::Pathu32) - HttpResponse { let id path.into_inner(); HttpResponse::Ok().body(format!(用户ID: {}, id)) } #[actix_web::main] async fn main() - std::io::Result() { HttpServer::new(|| { App::new().service( web::scope(/api/v1) .route(/users, web::get().to(list_users)) .route(/users/{id}, web::get().to(get_user)), ) }) .bind((127.0.0.1, 8080))? .run() .await }访问路径请求路径匹配结果GET /api/v1/userslist_usersGET /api/v1/users/10get_userid 10多个公共路由模块如果有多个模块可以分别用不同scopeApp::new() .service( web::scope(/api/v1) .route(/users, web::get().to(list_users)) .route(/users/{id}, web::get().to(get_user)), ) .service( web::scope(/api/v1/orders) .route(/list, web::get().to(list_orders)) .route(/{id}, web::get().to(get_order)), )这样最终路径是/api/v1/users /api/v1/users/{id} /api/v1/orders/list /api/v1/orders/{id}用configure拆分路由文件项目变大后不建议把所有路由写在main.rs可以用configure拆分。use actix_web::{web, App, HttpResponse, HttpServer}; async fn list_users() - HttpResponse { HttpResponse::Ok().body(用户列表) } async fn get_user(path: web::Pathu32) - HttpResponse { let id path.into_inner(); HttpResponse::Ok().body(format!(用户ID: {}, id)) } fn user_routes(cfg: mut web::ServiceConfig) { cfg.service( web::scope(/api/v1) .route(/users, web::get().to(list_users)) .route(/users/{id}, web::get().to(get_user)), ); } #[actix_web::main] async fn main() - std::io::Result() { HttpServer::new(|| { App::new().configure(user_routes) }) .bind((127.0.0.1, 8080))? .run() .await }嵌套 scope如果公共前缀有多层可以嵌套App::new().service( web::scope(/api) .service( web::scope(/v1) .route(/users, web::get().to(list_users)) .route(/users/{id}, web::get().to(get_user)), ) )最终路径仍然是/api/v1/users /api/v1/users/{id}推荐写法如果只是想给一组接口加公共前缀推荐web::scope(/api/v1) .route(/users, web::get().to(list_users)) .route(/users/{id}, web::get().to(get_user))如果项目模块较多推荐App::new() .configure(user_routes) .configure(order_routes) .configure(product_routes)这样每个模块可以单独维护自己的公共路径。需要我帮你配一下跨域中间件吗前端和后端分开部署时经常要用。
返回列表