Express实现注册功能报TypeError: Cannot read properties of undefined (reading 'username')如何解决
报错触发原因
- 该报错的根本原因是
req.body为undefined,你尝试读取undefined的username属性触发了类型错误。req.body默认是未定义的,需要Express注册对应的请求体解析中间件才会被赋值。
对应解决方案
方案1:Express v4.16.0及以上版本(主流版本)
直接在项目入口文件(通常为app.js/index.js)中注册Express内置的解析中间件,注意中间件注册必须放在路由注册之前:
const express = require('express') const app = express() // 新增以下两行解析中间件 app.use(express.json()) app.use(express.urlencoded({ extended: true })) // 再引入注册你的auth路由 const authRouter = require('./routes/auth') app.use('/api/auth', authRouter) // 其他代码不变
方案2:Express v4.16.0以下旧版本
需要先单独安装body-parser依赖,再注册中间件:
- 执行安装命令:
npm install body-parser - 在入口文件中注册中间件:
const express = require('express') const app = express() const bodyParser = require('body-parser') app.use(bodyParser.json()) app.use(bodyParser.urlencoded({ extended: true })) // 后续路由注册逻辑不变
额外验证点
- 调用注册接口时,请求头的
Content-Type需要设置为application/json,否则解析中间件不会处理请求体 - 确认中间件的注册顺序在所有路由注册之前,顺序错误也会导致
req.body无法正常解析
内容的提问来源于stack exchange,提问作者Belahrach Anas
相关产品推荐
相关产品推荐

