Разбор URL в Iron и получение динамической части

У меня есть 2 маршрута в Iron:

  1. /something/:some_int # целое число
  2. /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.

Другие вопросы по тегам