首页 > 解决方案 > 无法访问 put 路由中的表单数据

问题描述

当我提交表单时 req.body 一直空着。

形式:

<form
  action="/campgrounds/<%= campground._id %>/reviews/<%= review._id %>?_method=PUT"
  method="POST"
  novalidate
  class="validated-form"
  enctype="multipart/form-data"
>
   <label for="body" class="form-label">Review: </label>
   <input
     type="text"
     class="form-control"
     id="body"
     name="review[body]"
     required
     value="<%= review.body %>"
   />
   <button class="btn btn-info">Update</button>
</form>

我也在使用这个中间件

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

这是我走的路线

router.put(
   "/:id",
   catchAsync(reviews.editReview)
   );

这是editReview函数

  const { id } = req.params;
  const review = await Review.findByIdAndUpdate(id, { ...req.body.review });
  await review.save();

标签: node.jsformsexpress

解决方案


body-parser (express.json is body-parser.json) 不支持 multipart/form-data 你可以通过使用 multer 来解决这个问题

npm install multer

在 app.js 中

const multer = require('multer');

app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(multer().array());

推荐阅读