Express中req.body返回null,Insomnia发POST请求触发username非空约束错误
问题根因
你的判断完全正确,问题确实是请求头缺少Content-Type: application/json导致的:
Express内置的express.json()中间件只有检测到请求携带Content-Type: application/json头时,才会将请求体的JSON内容解析到req.body对象上。缺少该头时req.body为undefined,你向createNewUser传入的req.body.username自然是null,触发了数据库users表的username字段非空约束报错。
修复步骤
1. 修复Insomnia请求配置(二选一即可)
- 自动配置:在Insomnia的请求编辑页,切换到「Body」标签,确保下拉选项选择的是
JSON而非Text/Form等其他格式,选择后Insomnia会自动在请求中添加Content-Type: application/json头 - 手动配置:在Insomnia的请求编辑页,切换到「Headers」标签,手动新增一条表头:
Key Value Content-Type application/json
2. 修复代码隐含的笔误
你提供的createNewUser函数存在拼写错误,会导致后续请求正常后仍报错:
原代码:
let { id } = results.row[0];
应修改为:
let { id } = results.rows[0];
(SQL查询返回结果存在results.rows数组中,原代码少了末尾的s,调用时会抛出未定义错误)
验证方法
修改完成后重新发送请求,查看终端打印的请求头会出现Content-Type: application/json,同时打印req.body可以看到正常解析后的username和password字段,即可成功插入用户。
内容的提问来源于stack exchange,提问作者Lambit
相关产品推荐
相关产品推荐

