2017-10-13 3 views
0

Ich habe 2 Routen in Eisen:Parsing eine URL in Eisen und bekommen einen dynamischen Teil

  1. /something/:some_int # integer
  2. /something2/:some_str # String

Wie kann ich diese :some_{int, str} Teile von ihnen bekommen ?

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 

Antwort

0

Verwenden Sie die router crate:

let mut router = Router::new(); 
router.get("https://stackoverflow.com/users/:user_id", user_show, "user_show"); 
let _server = Iron::new(router).http(("127.0.0.1", 8787)).unwrap(); 

In Ihrem Handler, erhalten Sie einen Verweis auf die Router ‚s Params, die Sie den Wert für jeden benannten Parameter optimal nutzen können. Beachten Sie, dass das Argument Params::find entspricht den zugewiesenen Namen, wenn die Route festgelegt wurde:

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"); 
} 

One Sie haben einen Parameter als String, Sie parse it into a number like anywhere else in Rust

.