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

Express用户注册触发TypeError:无法解构req.body的'username'属性

解决Express中req.body未定义的注册错误

错误根源

你遇到的TypeError: Cannot destructure property 'username' of 'req.body' as it is undefined,本质是Express默认不会自动解析POST请求的请求体,必须手动添加解析中间件才能获取表单提交的数据。

修复步骤

在初始化Express应用后、注册路由之前,添加解析application/x-www-form-urlencoded格式请求体的中间件(这是表单提交的常见格式):

const app = express()

// 关键:添加请求体解析中间件,必须放在路由之前
app.use(express.urlencoded({ extended: true }));
// 如果你的前端会提交JSON格式数据,再加这一行:
// app.use(express.json());

app.use(flash());
app.set('view engine', 'ejs')
app.use(express.static('public')) 

额外代码问题提醒

你的注册路由里还有一个容易忽略的bug:创建User实例时,passport字段被重复赋值了:

const user = new User ({
    username:username,
    email:email,
    passport:passport, // 这里先赋值了用户的passport信息
    address:address,
    fullname:fullname,
    phone:phone,
    passport:hashedPassword, // 这里又覆盖成了哈希后的密码
    active:true,
    role:'USER'
})

这会导致用户的护照信息丢失,应该把哈希后的密码存到模型对应的password字段(假设你的User模型里有这个字段),比如改成password: hashedPassword。

验证修复

添加中间件后,重新启动服务执行注册操作,req.body就能正确获取到前端提交的表单数据,解构赋值不会再报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:23:16