我遇到了很多问题,没有一个能对我的情况有所帮助。
在一页上,我有2个表格,每个method="post"
都将转到不同的路径。第一种形式可以正常工作,并且req.body
可以按预期填充。第二种形式在访问req.body
时返回一个空对象。
我正在使用body解析器,这就是第一种形式可以正常工作的原因,那么第二种形式有什么问题吗?
服务器代码(或重要位):
const express = require("express");
const bodyParser = require("body-parser");
const ejs = require("ejs");
const app = express();
app.set('view engine', "ejs");
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.post("/upload", upload.single("image"), (req, res) => {
let cat = req.body.categories; //returns element named "categories" as expected
//this post request works
res.redirect("/upload#upload");
});
app.post("/delete", (req, res) => {
console.log(req.body) //returns "{}"
res.status(204).send();
})
标记(也只是重要部分):
//the working form
<form action="/upload" method="post" enctype="multipart/form-data">
<select id="categories" name="categories" class="btn dropdown-toggle">
<option class="dropdown-item" value="Photography">Photography</option>
<option class="dropdown-item" value="Painting">Painting</option>
<option class="dropdown-item" value="Drawing">Drawing</option>
<option class="dropdown-item" value="Digital">Digital</option>
</select>
<button type="submit" class="btn btn-lg btn-info"><i class="fas fa-upload"></i>Upload</button>
</form>
//the form that is not working
<form action="/delete" method="post" enctype="multipart/form-data">
<select id="medium" name="medium" class="btn dropdown-toggle" onchange="onChange()">
<option id="blank" class="drodown-item" value="placeholder"></option>
<option class="dropdown-item" value="photos">Photography</option>
<option class="dropdown-item" value="paintings">Painting</option>
<option class="dropdown-item" value="drawings">Drawing</option>
<option class="dropdown-item" value="digitals">Digital</option>
</select>
<button name="button" type=submit class="btn btn-lg btn-danger"><i class="fa fa-trash"></i> Remove Artwork</button>
</form>
那么为什么一个起作用而不另一个起作用?是因为两种形式都在同一页面上吗?我有不同的路线来处理不同的请求,所以我不明白为什么。另外,由于其他形式(以及应用程序的其余部分)按预期运行,因此似乎可以正确设置主体解析器。最后,您可以看到表单中有几个命名元素,因此我不仅忘记了它们。
许多其他问题导致了答案,但对我而言并非如此。