使用POST创建用户异常:提示成功但GET返回空对象{}
这种情况我碰到过好几次,大概率是数据在POST阶段就没正确存进去,给你捋几个最常见的原因和排查方向:
请求体解析中间件缺失
这是新手最容易踩的坑!如果你的Express应用没配置express.json()(或者老版本的body-parser),那么POST请求的req.body会是空对象。你存进数据库的自然就是空对象,GET查询回来当然也是{}。
解决方法:在你的应用初始化代码里加上这行:app.use(express.json()); // 解析JSON格式的请求体POST接口存数据时逻辑错误
从你给出的代码片段看,POST接口没写完,但很大可能是你存数据的时候没用到req.body里的内容。比如不小心写了db.insertOne({}, callback)而不是db.insertOne(req.body, callback)。
排查技巧:在POST接口里加个日志打印console.log("收到的请求体:", req.body),如果打印出来是空,那就是上面中间件的问题;如果有数据但存进去是空,那就是存数据的代码写错了。数据库集合不匹配
确认POST和GET操作的是同一个数据库集合!比如你POST的时候把数据存到了users集合,但GET却查的是contacts集合(看你的GET代码是查contacts),那自然查不到正确的数据。GET接口的字段处理(次要原因)
你的GET代码里有delete c._id,但如果数据库里的文档本来就只有_id字段(因为POST存的是空对象),删除后就只剩{}了。不过这是结果,根源还是POST没存对数据。
给你一个修正后的POST接口示例,供参考:
// 先确保全局配置了请求体解析中间件 app.use(express.json()); app.post(BASE_API_PATH + "/contacts", (req, res) => { console.log(Date() + " - POST /contacts, 收到数据:", req.body); // 先校验请求体是否为空 if (!Object.keys(req.body).length) { return res.status(400).send("请提供有效的用户数据"); } db.insertOne(req.body, (err, result) => { if (err) { console.error("插入数据库失败:", err); return res.sendStatus(500); } res.status(201).send("用户创建成功"); }); });
内容的提问来源于stack exchange,提问作者RoyalUp

