Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问req.body时,Post请求返回{}_Javascript_Node.js_Forms_Express_Post - Fatal编程技术网

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>