node.js - 无法访问 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();
解决方案
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());
推荐阅读
- coldfusion - 为什么我会收到我的组件未定义的 ColdFusion 错误?
- assembly - 汇编语言:字节操作和字操作的主要区别是什么?
- gcloud - 未找到 gcloud 或权限被拒绝
- java - 使用 org.json 将 XML 转换为 JSON 时出现 NoSuchMethod 错误
- android - 如何使用 ViewModel 和 Databinding 实现验证?
- python-3.x - 对于更新 - 用于 postgres 的 psycopg2 游标
- python - 使用 csv 的前 5 个分数
- laravel - Laravel:配置默认邮件主机
- python - Python 相当于 Tcl 的“字符串匹配”
- python - 如何在 Django 中覆盖用户名 max_length?