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

Express应用注册表单POST请求提示name is not defined错误如何解决

问题原因
  • Express默认不会解析POST请求的请求体,未配置对应中间件的情况下req.body默认值为undefined,尝试读取req.body.name自然会触发变量未定义的报错
  • 你当前表单配置了enctype="multipart/form-data"编码格式,该格式专为带文件上传的场景设计,普通表单不需要该配置,且该格式无法通过Express自带的解析中间件解析,需要额外配置专用中间件
解决方法

方案1:无文件上传需求(适用于你当前的普通注册表单场景,推荐)

  1. 修改register.hbs中的表单标签,删除多余的enctype="multipart/form-data"属性:
<form action="/register" method="post">
  1. 在app.js中添加Express自带的请求体解析中间件,添加位置在静态资源配置之后、路由配置之前即可:
// 解析json格式请求体
app.use(express.json())
// 解析表单默认的urlencoded格式请求体
app.use(express.urlencoded({extended: false}))

修改后重启服务即可正常读取req.body.name的值。

方案2:需要保留multipart/form-data格式(后续有文件上传需求时使用)

  1. 安装专用解析中间件multer:
    npm install multer
  2. 在app.js中引入并配置multer:
var multer = require('multer')
var upload = multer() // 仅解析表单字段、不处理文件上传时用该配置
  1. 修改/register的POST路由,挂载multer中间件:
app.post('/register', upload.none(), (req,res)=>{
    const name = req.body.name;
    console.log(name);
    res.render('index');
})

修改后重启服务即可正常获取表单参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:45:05