搜尋

首頁  >  問答  >  主體

將標題重寫為: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粉585541766301 天前370

全部回覆(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
  • 取消回覆