如何解析Nickel.rs中表单提交的参数?

时间:2016-02-27 08:29:21

标签: rust nickel

我正在使用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)
});

2 个答案:

答案 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();
    ...
}

我希望我知道responsetry_with!正在做什么。