Sequelize定义使用模型时添加用户接口报username属性读取错误
你遇到的TypeError: Cannot read property 'username' of undefined 和 Sequelize 本身无关,报错触发点是执行req.body.username时,req.body 本身是undefined 状态,才会尝试给undefined取username属性时报错。
优先检查Express请求体解析中间件配置
Express框架本身不会自动解析请求携带的JSON参数,必须显式挂载内置解析中间件,才能让req.body拿到请求里的参数值。直接在app.js中、注册路由的代码之前,添加以下配置即可解决大部分这类问题:// 解析JSON格式请求体 app.use(express.json()) // 解析表单格式请求体 app.use(express.urlencoded({ extended: true }))绝大多数新手搭建接口时漏配这两行,会直接导致
req.body全程为undefined,和你遇到的报错完全匹配。校验Postman请求的格式正确性
第一要确认请求头的Content-Type值为application/json,和你传递的JSON请求体格式匹配;第二要修正你贴的非标准JSON格式:你写的请求体最后一个字段后多了多余尾逗号,这类不规范的JSON很可能导致解析失败,调整为标准格式即可:修正后的标准JSON请求体:
{ "username": "test" }补全接口的异常捕获逻辑
你当前的异步控制器方法没有加异常捕获结构,一旦接口执行报错就会触发UnhandledPromiseRejectionWarning警告。调整控制器代码结构,加入try/catch块,既可以避免未处理Promise报错,也能方便后续定位问题:const User = require('../../models/Users') exports.addUser = async (req, res) => { try { const newUser = await User.create({ username: req.body.username }) res.send('User Added.') } catch (err) { console.error('新增用户失败:', err) res.status(500).send('服务端处理失败') } }校验模型加载状态
你之前在控制器里打印的typeof User如果输出为function,说明模型加载逻辑没有问题——Sequelize的Model实例本身就是构造函数类型,不需要额外调整模型定义、数据库连接的代码。控制器里冗余导入的db配置不影响功能,可按需删除。
内容的提问来源于stack exchange,提问作者user15188165

