Javascript 访问req.body时,Post请求返回{}
我已经经历了无数的问题,没有人能完全帮助我的处境 在一个页面上,我有两个表单,每个表单都指向不同的路径。第一个表单工作正常,Javascript 访问req.body时,Post请求返回{},javascript,node.js,forms,express,post,Javascript,Node.js,Forms,Express,Post,我已经经历了无数的问题,没有人能完全帮助我的处境 在一个页面上,我有两个表单,每个表单都指向不同的路径。第一个表单工作正常,req.body按预期填充。第二个表单在访问req.body时返回一个空对象 我使用的是主体解析器,这就是第一种形式正确工作的原因,那么我的第二种形式有什么问题呢 服务器代码(或重要位): 标记(也只是重要的位): //工作表单 摄影 绘画 绘画 数字的 上传 //不起作用的窗体 摄影 绘画 绘画 数字的 去除艺术品 那么,为什么一个有效而另一个无效呢?是因为两张表格在同
req.body
按预期填充。第二个表单在访问req.body
时返回一个空对象
我使用的是主体解析器,这就是第一种形式正确工作的原因,那么我的第二种形式有什么问题呢
服务器代码(或重要位):
标记(也只是重要的位):
//工作表单
摄影
绘画
绘画
数字的
上传
//不起作用的窗体
摄影
绘画
绘画
数字的
去除艺术品
那么,为什么一个有效而另一个无效呢?是因为两张表格在同一页上吗?我有不同的途径来处理不同的请求,所以我不明白为什么。此外,由于另一个表单(以及应用程序的其余部分)正在按预期工作,因此主体解析器似乎设置正确。最后,你可以看到我的表单中有几个命名元素,所以我并没有忘记它们
许多其他问题的答案都是这些,但对我来说并非如此。尝试删除删除中的
enctype=“multipart/form data”
(因为删除时不会上载文件)-看不出这会有什么不同,但。。。body parser文档特别指出它不处理多部分的body-因此可能upload.single(“image”)
有助于上传我不敢相信,但它确实起到了作用。如此愚蠢的疏忽。如果您想将其作为官方答案发布,我会将其标记为正确。我会的,但我不明白为什么上传有效,除非是upload.single(“image”)
中间件正确解析了正文。我只是说删除enctype=“multipart/form data”
有效。upload.single
是multer处理要上传的图像的工具,因此它不相关。@PsiKai-回答你自己的问题没什么错,老实说,我找不到正确的措辞:p
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>