Как мне проанализировать параметры, представленные формой в Nickel.rs?

Я создаю веб-приложение с Rust и Nickel.rs. У меня есть маршрут, который отправляет форму с запросом 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 ответа

Я нашел решение, которое работает на данный момент, хотя я не знаю, является ли это "правильным" решением.

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'}
});

Я бы сделал это так:

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! хоть.

Другие вопросы по тегам