MongoDB单条数据更新失败求助:请求体数据无法获取
解决MongoDB更新时req.body返回undefined导致字段设为null的问题
我一眼就看出问题所在了——你的Express应用没有配置解析JSON请求体的中间件,这才导致req.body里拿不到你发送的JSON数据,进而emp对象的所有属性都是undefined,MongoDB在执行更新时会把undefined转换成null,最终就出现了你看到的所有字段被更新为null的情况。
修复步骤:
添加JSON解析中间件
在你的Express主文件(通常是app.js或者server.js)里,添加以下代码,确保它在挂载路由之前执行:app.use(express.json());这个中间件会自动解析请求中的JSON格式数据,并把解析后的结果挂载到
req.body上,这样你就能正常获取到请求体里的name、position等字段了。验证中间件的位置
一定要确保express.json()中间件是在你定义路由(比如router.put('/:id', ...))之前被注册的,否则路由处理函数还是拿不到解析后的请求体数据。
额外的优化建议:
- 可以添加表单数据解析的中间件(如果后续有需要处理表单请求的话):
app.use(express.urlencoded({ extended: true })); - 在创建
emp对象时,可以做一些空值判断,避免把不必要的undefined传入更新操作,比如:
这样只会更新有传入值的字段,不会把没传的字段设为null。var emp = {}; if (req.body.name) emp.name = req.body.name; if (req.body.position) emp.position = req.body.position; if (req.body.office) emp.office = req.body.office; if (req.body.salary) emp.salary = req.body.salary;
测试验证
修复后,再发送你之前的JSON请求体:
{
"name": "Some Name",
"position": "A Position",
"office": "Location Name",
"salary": 60000
}
此时emp.name就能正常获取到值,更新操作也会正确修改MongoDB里的文档了。
内容的提问来源于stack exchange,提问作者buggy_coder
相关产品推荐
相关产品推荐

