You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

表单已填写但req.body.comment始终为空的Node.js问题求助

问题解决:req.body.comment始终为空的原因及修复方案

核心原因

你的表单设置了enctype='multipart/form-data',但Express默认的请求体解析器(express.urlencoded())只能处理application/x-www-form-urlencoded类型的数据,无法解析multipart/form-data格式的表单字段,导致req.body为空或拿不到comment值。而你其他正常的方法对应的表单应该没有设置这个enctype,所以能正常解析。

修复方案

方案1:移除不必要的enctype(推荐,因为当前表单没有文件上传)

直接删除表单标签里的enctype='multipart/form-data',让表单默认使用application/x-www-form-urlencoded类型:

form(method='POST' action='')
  div.form-group
    label(class="shoe-detail-comment-box" for='comment') Comment:
    textarea#summary.form-control(type='textarea', placeholder='Comment here', name='comment', required='true')
  button.btn.btn-primary(type='submit') Submit

这样服务器端的express.urlencoded()就能正常解析表单数据,req.body.comment就能获取到填写的内容。

方案2:配置multer处理multipart/form-data(如果后续需要上传文件)

如果确实需要保留multipart/form-data(比如后续要添加图片上传功能),需要使用multer中间件来解析:

  1. 安装multer:
npm install multer
  1. 在路由文件中引入并配置multer:
const multer = require('multer');
// 因为不需要存储文件,使用内存存储模式即可
const upload = multer();
  1. 修改路由,添加upload.none()中间件(用于处理不含文件的multipart表单):
router.post("/shoe/:id", upload.none(), shoe_controller.shoe_details_post);

配置完成后,服务器就能解析multipart表单中的文本字段,req.body.comment即可正常获取值。

额外验证点

  • 确认你的Express服务器已经配置了express.urlencoded({ extended: true })中间件(这一步你应该已经完成,因为其他方法能正常获取表单值):
app.use(express.urlencoded({ extended: true }));
  • 检查textarea的name属性是否为comment,你的代码中已经正确设置,无需修改。

内容的提问来源于stack exchange,提问作者Jsin23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:33:09