我有一个与MongoDB的NodeJS后端调用。这个特定的API调用在很长一段时间内都工作得很好,当我在前端测试一些东西时,我意识到调用没有进行。我检查了路由、控制器、索引文件,并通过Postman测试了调用,它工作正常,没有错误,甚至返回了一个OBJECTID(这意味着它必须与数据库交互,对吗?)。然而,当我搜索Mongo外壳时,什么也没有返回,这告诉我它不是在保存。我找不到任何错误,在此过程中任何地方都没有错误。我查看了MongoDB Atlas,这个集合只有4KB的数据,所以并不是它太满了,我已经测试了所有其他API调用(Get,Patch,Delete),它们工作得很好,在我的其他集合中没有类似的问题。
更奇怪的是,在SAVE调用期间,我将ID作为引用推送到其他集合的两个文档。Mongo外壳确实显示新的ID正在填充到其他文档,但它并没有保存实际的文档……这应该发生在推送之前,并且需要发生才能获得对象ID
下面是添加新访问文档的控制器、它的路线以及 Postman 的响应。我真的不知道还有什么办法来确定正在发生的事情。
控制器
exports.addVisit = async (req, res) => {
const hoursValue = getTotalHours(req.body.visitStart, req.body.visitEnd)
try {
const visit = new Visit({
totalHours: hoursValue,
user: req.body.user,
client: req.body.client,
visitStart: req.body.visitStart,
visitEnd: req.body.visitEnd,
location: req.body.location
});
const user = await User.findById(req.body.user);
const client = await Client.findById(req.body.client);
visit.user = user._id
visit.client = client._id
visit.save();
user.visits.push(visit._id);
user.save();
client.visits.push(visit._id);
client.save();
console.log(visit)
console.log(user)
console.log(client)
res.status(201).send(visit);
} catch (error) {
res.status(400)
res.send({ error: "Error adding visit", error})
}
}
路线
router.route("/visits").post(addVisit)
Postman 电话:http://localhost:5000/visitapi/visits
{
"client": "6205a8313fe12d6b4ec354c4",
"location": "Home",
"user": "62410a1dcaac9a3d0528de7a",
"visitStart": "2022-10-12T17:00:00.000Z",
"visitEnd": "2022-10-12T19:00:11.000Z"
}
Postman 回复
{
"client": "6205a8313fe12d6b4ec354c4",
"user": "62410a1dcaac9a3d0528de7a",
"location": "Home",
"visitStart": "2022-10-12T17:00:00.000Z",
"visitEnd": "2022-10-12T19:00:11.000Z",
"totalHours": 2,
"goals": [],
"id": "635302bb48e85ff6ad17ee59"
}
NodeJS控制台无误地记录相同的新文档:
{
client: new ObjectId("6205a8313fe12d6b4ec354c4"),
user: new ObjectId("62410a1dcaac9a3d0528de7a"),
location: 'Home',
visitStart: 2022-10-12T17:00:00.000Z,
visitEnd: 2022-10-12T19:00:11.000Z,
totalHours: 2,
_id: new ObjectId("635302bb48e85ff6ad17ee59"),
goals: []
}
显示客户端集合文档的MongoShell存储了新的访问文档ID:
visits: [
ObjectId("6257158d157e807e51c7e009"),
ObjectId("62fd852a252b83f4bc8f9782"),
ObjectId("63056cee252b83f4bc8f97e9"),
ObjectId("634ee01ec582da494032c73e"),
ObjectId("634ee09cc582da494032c7aa"),
ObjectId("634ee3d6ddbe3f7e6641d69e"),
ObjectId("634efcf1ddbe3f7e6641d6f9"),
ObjectId("634efdd3ddbe3f7e6641d71b"),
ObjectId("635029937da8972360d907c1"),
ObjectId("6350a0e37da8972360d9084f"),
ObjectId("635302bb48e85ff6ad17ee59") //_id matches the same returned by Postman/ NodeJS
],
同样,在 Postman 或前端或后端都没有错误,后端甚至记录了新文档的返回,但没有新文档被保存到DB中,除非我手动将其传递到MUGOSSH外壳中,并且仅针对这一个集合。完全迷失了,我将不胜感激任何关于如何探索/解决这一问题的指导。谢谢
1条答案
按热度按时间dvtswwa31#
这些MongoDB调用预计将是异步的。您可能希望将
await
添加到所有这些参数中。