当我尝试提交表单时出现错误 422 Rocket Rust
Gives error 422 When I try to submit the form Rocket Rust
我正在尝试制作一个表格来在 Rocket Rust 中创建帖子(我还没有访问数据库)。
当我尝试提交表单时出现错误 422。
错误:
POST /new_post application/x-www-form-urlencoded:
=> Matched: POST /new_post (new_post_form)
=> Error: The incoming form failed to parse.
=> Outcome: Failure
=> Warning: Responding with 422 Unprocessable Entity catcher.
=> Response succeeded.
处理程序代码:
#[post("/new_post", data="<form>")]
fn new_post_form(form: Form<NewPostForm>) -> Flash<Redirect> {
let form = form.into_inner();
if form.body.is_empty() {
Flash::error(Redirect::to("/new_post"), "NoBodyError");
}
if form.name.is_empty() {
Flash::error(Redirect::to("/new_post"), "NoNameError");
}
if form.name.is_empty() && form.body.is_empty() {
Flash::error(Redirect::to("/new_post"), "NoNameBodyError")
} else {
Flash::error(Redirect::to("/new_post"), "NoNameBodyError")
}
}
表单结构:
#[derive(FromForm)]
pub struct NewPostForm {
pub name: String,
pub body: String
}
HTML 表格:
<form action="/new_post" method="post">
name:<input type="text" name="name" id="name">
Body:<input type="text" name="body" id="body">
<button type="submit" name="button"></button>
</form>
P.S。我认为问题出在 HTML 形式,而不是 Rust。如果问题出在 Rust 中,它会给出另一个错误。
仅从代码片段很难理解这里到底是什么问题。我认为您应该尝试查看后端接收到的确切数据,并尝试了解为什么它没有被代码生成的 FromForm
实现解析。
您实际上可以自己实现 FromForm
特性。只需删除 #[derive(FromForm)]
并执行:
impl<'f> FromForm<'f> for NewPostForm {
type Error = ();
fn from_form(items: &mut FormItems<'f>, strict: bool) -> Result<NewPostForm, ()> {
// Inspect `items` here
// ...
}
}
问题出在 HTML 表格中。当我删除 name="button"
时,表单开始工作。
更新表格:
<form action="/new_post" method="post">
name:<input type="text" name="name" id="name">
Body:<input type="text" name="body" id="body">
<button type="submit"></button>
</form>
我正在尝试制作一个表格来在 Rocket Rust 中创建帖子(我还没有访问数据库)。 当我尝试提交表单时出现错误 422。
错误:
POST /new_post application/x-www-form-urlencoded:
=> Matched: POST /new_post (new_post_form)
=> Error: The incoming form failed to parse.
=> Outcome: Failure
=> Warning: Responding with 422 Unprocessable Entity catcher.
=> Response succeeded.
处理程序代码:
#[post("/new_post", data="<form>")]
fn new_post_form(form: Form<NewPostForm>) -> Flash<Redirect> {
let form = form.into_inner();
if form.body.is_empty() {
Flash::error(Redirect::to("/new_post"), "NoBodyError");
}
if form.name.is_empty() {
Flash::error(Redirect::to("/new_post"), "NoNameError");
}
if form.name.is_empty() && form.body.is_empty() {
Flash::error(Redirect::to("/new_post"), "NoNameBodyError")
} else {
Flash::error(Redirect::to("/new_post"), "NoNameBodyError")
}
}
表单结构:
#[derive(FromForm)]
pub struct NewPostForm {
pub name: String,
pub body: String
}
HTML 表格:
<form action="/new_post" method="post">
name:<input type="text" name="name" id="name">
Body:<input type="text" name="body" id="body">
<button type="submit" name="button"></button>
</form>
P.S。我认为问题出在 HTML 形式,而不是 Rust。如果问题出在 Rust 中,它会给出另一个错误。
仅从代码片段很难理解这里到底是什么问题。我认为您应该尝试查看后端接收到的确切数据,并尝试了解为什么它没有被代码生成的 FromForm
实现解析。
您实际上可以自己实现 FromForm
特性。只需删除 #[derive(FromForm)]
并执行:
impl<'f> FromForm<'f> for NewPostForm {
type Error = ();
fn from_form(items: &mut FormItems<'f>, strict: bool) -> Result<NewPostForm, ()> {
// Inspect `items` here
// ...
}
}
问题出在 HTML 表格中。当我删除 name="button"
时,表单开始工作。
更新表格:
<form action="/new_post" method="post">
name:<input type="text" name="name" id="name">
Body:<input type="text" name="body" id="body">
<button type="submit"></button>
</form>