首页  >  问答  >  正文

将标题重写为:MongoDB将关键数据存储在集合中,但会将过期数据发送到res()

一切都运行正常,但我在res()中得到的数据比实际操作晚一步。我已经重写了整个代码一百次,但不再理解问题出在哪里。

这是后端代码的一部分,使用了express.js、node.js和mongodb:

export const addToCart = async (req, res) => { try {
const cart = await CartModul.findOne({ user: req.userId });
if (cart) {
  const product_id = req.body.product_id;
  const item = cart.cartItems.find((c) => c.product_id == product_id);
  console.log("item", item);
  if (item) {
    try {
      const cart = await CartModul.findOneAndUpdate(
        { user: req.userId, "cartItems.product_id": product_id },
        {
          "cartItems.$": {
            ...req.body,
            quantity: item.quantity + req.body.quantity,
            totalPrice: item.totalPrice + req.body.price,
          },
        }
      );
      if (cart) {
        return res.status(200).json({ cart });
      }
    } catch (error) {
      return res.status(400).json({ error });
    }
  } else {
    try {
      const cart = await CartModul.findOneAndUpdate(
        { user: req.userId },
        {
          $push: {
            cartItems: req.body,
          },
        }
      );
      if (cart) {
        return res.status(200).json({ cart });
      }
    } catch (error) {
      return res.status(400).json({ error });
    }
  }
} else {
  try {
    const cart = new CartModul({
      user: req.userId,
      cartItems: req.body,
    });
    cart.save();
    res.json(cart);
  } catch (error) {
    return res.status(400).json({ error });
  }
} } catch (error) {
return res.status(400).json({ error })}};

P粉585541766P粉585541766299 天前363

全部回复(2)我来回复

  • P粉674876385

    P粉6748763852024-01-17 22:21:52

    在findOneAndUpdate()中使用{new: true},并在moment中使用save()进行异步操作

    回复
    0
  • P粉574268989

    P粉5742689892024-01-17 11:04:50

    在else条件中添加await。即:

    let newCart = await cart.save();
    res.json(newCart);

    回复
    0
  • 取消回复