MongoDB没有保存价值, Postman 的呼叫响应正常,没有错误

z0qdvdin  于 2022-10-22  发布在  Go
关注(0)|答案(1)|浏览(120)

我有一个与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外壳中,并且仅针对这一个集合。完全迷失了,我将不胜感激任何关于如何探索/解决这一问题的指导。谢谢

dvtswwa3

dvtswwa31#

这些MongoDB调用预计将是异步的。您可能希望将await添加到所有这些参数中。

visit.user = user._id
    visit.client = client._id
    await visit.save(); // <- this
    user.visits.push(visit._id);
    await user.save(); // <- this
    client.visits.push(visit._id);
    await client.save(); // <- and this

相关问题