2

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

2 回答 2

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!

于 2016-09-30T05:31:18.777 回答
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'}
});
于 2016-02-27T23:35:14.693 回答