Разбор URL в Iron и получение динамической части
У меня есть 2 маршрута в Iron:
/something/:some_int
# целое число/something2/:some_str
# строка
Как я могу получить это :some_{int, str}
части из них?
fn my_something_int_route_handler(req: &mut Request) -> IronResult<Response> {
let ref query = req.extensions.get::<Router>().unwrap().find("query").unwrap_or("/");
//what next ???
// how can I get the ":some_int" from :/something/:some_int
fn my_something2_str_route_handler(req: &mut Request) -> IronResult<Response> {
let ref query = req.extensions.get::<Router>().unwrap().find("query").unwrap_or("/");
// how can I get the ":some_str" from :/something/:some_str
1 ответ
Используйте ящик маршрутизатора:
let mut router = Router::new();
router.get("/users/:user_id", user_show, "user_show");
let _server = Iron::new(router).http(("127.0.0.1", 8787)).unwrap();
Внутри вашего обработчика вы получаете ссылку на Router
"s Params
что позволяет получить значение для каждого именованного параметра. Обратите внимание, что аргумент Params::find
соответствует именам, назначенным при определении маршрута:
fn user_show(req: &mut Request) -> IronResult<Response> {
let router = req.extensions.get::<Router>()
.expect("Unable to get router");
user_id = router.find("user_id")
.expect("A user id is required");
}
Если у вас есть параметр в виде строки, вы разбираете его в число, как и везде в Rust.