2016-02-27 60 views
2

我正在用Rust和Nickel.rs构建一个Web应用程序。我有一个提交POST请求的表单的路由。如何解析由Nickel.rs中的表单提交的参数?

我希望能够使用请求数据(从表单返回的数据),但我不知道如何去做。

// 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

我发现了一个现在可以使用的解决方案,但我不知道它是否是“正确的”解决方案。

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'} 
}); 
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!做虽然。