下面的代码有问题(我是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");
...
当执行(site/page?param=0)时,得到以下跟踪。看起来router是空的。怎么了?
router:Params { map: {} }
thread '<unnamed>' panicked at 'param is required', src/main.rs:xx:xx
所以,我决定使用params::{Params}
,几乎达到了我的目标,但是…
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);
...
};
我得到cmd="1600","100"
而不是想要的cmd=1600,100
。由于编译错误,无法使用format!({})
:
error[E0277]: `params::Value` doesn't implement `std::fmt::Display`
`params::Value` cannot be formatted with the default formatter
尝试不同的字符串/数字转换,但失败,因为val1
,val2
不是字符串,而是params::Value
。试图从cmd
字符串中删除引号,但也失败了。有什么简单的解决办法吗?
Router
的参数是URL模式中指定的参数,例如,如果您定义路由GET /:query
,那么您将获得存储相应路径段的query
参数。
通过Request::url
访问的查询字符串。