访问req.body时,发布请求返回{}

时间:2020-09-25 02:42:37

标签: javascript node.js forms express post

我遇到了很多问题,没有一个能对我的情况有所帮助。

在一页上,我有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>

那么为什么一个起作用而不另一个起作用?是因为两种形式都在同一页面上吗?我有不同的路线来处理不同的请求,所以我不明白为什么。另外,由于其他形式(以及应用程序的其余部分)按预期运行,因此似乎可以正确设置主体解析器。最后,您可以看到表单中有几个命名元素,因此我不仅忘记了它们。

许多其他问题导致了答案,但对我而言并非如此。

0 个答案:

没有答案