Как исправить ошибки синтаксического анализа в запросе POST в платформе Rust Rocket - PullRequest
0 голосов
/ 19 мая 2019

Я делаю очень простое веб-приложение, используя ржавый фреймворк 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 работает.Но если я использую свою форму, она отказывается анализировать.Что я делаю неправильно?Я просто пытаюсь создать веб-приложение, которое принимает данные и на основе этих данных что-то возвращает.Перенаправление веб-сайтов, очистка веб-страниц, я еще не уверен в специфике функциональности, но мне нужно иметь возможность набрать что-то в форму и получить ее для использования в моем коде ржавчины позже.Любая помощь будет оценена!

1 Ответ

0 голосов
/ 18 июля 2019

Мне кажется, проблема в том, что имя вашего параметра формы (<input type="text" name="searchterm">) не совпадает с именем вашего поля структуры (payload). Если вы переименуете одно или другое, чтобы они совпадали, ваша форма должна работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...