How do I get URL parameters?

1k Views Asked by At

Something wrong with below code (I'm absolutely new in Rust...):

let function = move |req: &mut Request| -> IronResult<Response> {
    let router = req.extensions.get::<Router>().expect("Unable to get router");
    println!("router:{:?}", router);
    let val = router.find("param").expect("param is required");
    ...
}
...
router.get("/page", function, "handler");
...

While executed (site/page?param=0), got below traces. Looks like 'router' is empty. What's is wrong ?

router:Params { map: {} }
thread '<unnamed>' panicked at 'param is required', src/main.rs:xx:xx

So, I decided to use params::{Params} and almost reached my goal, but...

let function = move |req: &mut Request| -> IronResult<Response> {
    use params::{Params};
    use crate::iron::Plugin;

    let map = req.get_ref::<Params>().unwrap();
    let val1 = map.find(&["param1"]).expect("param1 is required");
    let val2 = map.find(&["param2"]).expect("param2 is required");
    let cmd = format!("cmd={:?}{:?}\n", val1, val2);
    println!("{}", cmd);
    ...
};

I get cmd="1600","100" instead of wanted cmd=1600,100. Can't use format!({}) due to compilation error:

error[E0277]: `params::Value` doesn't implement `std::fmt::Display`
`params::Value` cannot be formatted with the default formatter

Tried different string/number conversions but failed since val1, val2 are not strings but params::Value. Tried remove quotes from cmd string but also failed. Any idea of simple solution?

1

There are 1 best solutions below

0
Masklinn On

The params of the Router are those specified in the URL pattern e.g. if you define a route GET /:query then you'll get a query param storing the corresponding path segment.

The querystring you access via Request::url.