Я делаю очень простое веб-приложение, используя ржавый фреймворк Rocket.У меня есть очень простой HTML-файл, имеющий следующую форму:
<form action="/search" method="post" accept-charset="utf-8">
Search Term:<input type="text" name="searchterm">
<input type="submit" value="search">
</form>
Далее, вот мои функции ракеты для обработки запросов.У меня есть функция get, которая выплевывает index.html при доступе к «/», затем для моей формы у меня есть следующие функции:
#[derive(FromForm)]
pub struct Request<'r> {
payload: &'r RawStr,
//we can add more if we want later on, for other form options...
}
#[post("/search", data = "<data>")]
pub fn process(data: Form<Request>) -> Result<Redirect, String> {
if data.payload == "Hello!" {
Ok(Redirect::to("/search/Hello"))
} else {
Err(format!("Unknown search term, '{}'.", data.payload))
}
}
Затем это отвечает на запросы GET:
#[get("/search/<term>")]
pub fn response(term: &RawStr) -> String {
format!("You typed in {}.", term)
}
Как я уже сказал, очень простые, очень скелеты, просто пытающиеся на цыпочках одновременно работать и с Rust, и с веб-приложениями.У меня тоже нет большого опыта в этом.Моя проблема заключается в том, что при использовании поля, представленного пользователю в моем html-файле, сервер возвращает ошибку:
POST /search application/x-www-form-urlencoded:
=> Matched: POST /search (process)
=> Error: The incoming form failed to parse.
=> Outcome: Failure
=> Warning: Responding with 422 Unprocessable Entity catcher.
=> Response succeeded.
Если я перейду напрямую, к «localhost: 8000 / search / Hello!»Я вижу, что мой ответ GET работает.Но если я использую свою форму, она отказывается анализировать.Что я делаю неправильно?Я просто пытаюсь создать веб-приложение, которое принимает данные и на основе этих данных что-то возвращает.Перенаправление веб-сайтов, очистка веб-страниц, я еще не уверен в специфике функциональности, но мне нужно иметь возможность набрать что-то в форму и получить ее для использования в моем коде ржавчины позже.Любая помощь будет оценена!