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
相关产品推荐
相关产品推荐

