Semuanya berjalan lancar, tetapi data yang saya perolehi dalam res() adalah satu langkah di belakang operasi sebenar. Saya telah menulis semula keseluruhan kod seratus kali dan tidak lagi memahami apa masalahnya.
Ini adalah sebahagian daripada kod hujung belakang, menggunakan express.js, node.js dan 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 })}};
Gunakan {new: true} dalam findOneAndUpdate(), dan gunakan save() seketika untuk operasi tak segerak
Tambah tunggu dalam keadaan lain. Iaitu: