我正在使用Rust和Nickel.rs构建一个Web应用程序。我有一个路由,提交一个带有POST请求的表单。
我希望能够使用请求数据(从表单返回的数据),但我不知道如何去做。
// This works and prints 'email=bar&password=foo'
// but how do I get the values separately?
router.post("/login", middleware! { |request, response|
let mut body = String::new();
request.origin.read_to_string(&mut body).unwrap();
format!("{}", body)
});
答案 0 :(得分:0)
我找到了一个现在有效的解决方案,虽然我不知道它是否是“正确”的解决方案。
extern crate url;
use url::*;
use std::collections::HashMap;
router.post("/login", middleware! { |request, response|
let mut body = String.new();
request.origin.read_to_string(&mut body).unwrap();
let mut data = HashMap::new();
for (key, value) in form_urlencoded::parse(body.as_bytes()) {
data.insert(key, value);
}
println!("{:?}", data) # {'password': 'bar', 'email': 'far'}
});
答案 1 :(得分:0)
我会这样做:
router.post("/login", middleware! { |request, response|
let form_body = try_with!(response, request.form_body());
let user = form_body.get("username").unwrap_or_default();
let pass = form_body.get("password").unwrap_or_default();
...
}
我希望我知道response
中try_with!
正在做什么。