在Nodejs和Mongoose中删除或将单个项目添加到购物车时,如何更新subTotal?

问题描述

我是Nodejs,Express和Mongoose的新手。我正在做一个电子商务网站,但我不确定在从购物车中添加或删除商品时如何更新子总计。以下是我这样做的尝试。但这是行不通的。如果有人可以帮助我,那就太好了。 我的购物车回复:

[
{
    "subTotal": 130,"_id": "5f55af330795f020c509f55a","items": [
        {
            "_id": "5f55af330795f020c509f55b","productId": {
                "_id": "5f4e3d0cc62ced24e27d820c","brandName": "Tofatin XR","dosageType": "Xr Tablet"
            },"quantity": 2,"total": 130,"price": 65,"createdAt": "2020-09-07T03:55:31.097Z","updatedAt": "2020-09-07T03:55:31.097Z"
        }
    ],"updatedAt": "2020-09-07T03:55:31.097Z","__v": 0
}

]

我尝试在添加产品时更新总数(但相乘会产生错误):

const updateCart = async (req,res,next) => {
const {
    cartId
} = req.params
const {
    itemId
} = req.body;
const total = parseFloat(req.body.total).toFixed(2)
try {
    if (!mongoose.Types.ObjectId.isValid(cartId)) {
        return res.status(422).send({
            message: `Provided id is not valid`
        });
    }
    const foundCart = await Cart.findOne({
        _id: cartId
    });
    if (!foundCart) {
        return res.status(404).send({
            message: `No cart recorded with the id!`
        });
    } else {
        await Cart.updateOne({
            _id: cartId,'items._id': itemId
        },{
            $set: {
                'items.$.quantity': Number.parseInt(req.body.quantity),// 'items.$.total': {
                //         $multiply: ["items.$.price",Number.parseInt(req.body.quantity)]
                // },'items.$.total': total
            }
        },{
            upsert: true,new: true,runValidators: true
        })
        return res.json({
            message: `Cart updated successfully!`
        })
    }

} catch (error) {
    next(error)
}

}

我删除的商品代码

const removeItemFromCart = async (req,next) => {
const { itemId } = req.body;
const { cartId } = req.params;


try {
    if (!mongoose.Types.ObjectId.isValid(itemId) || !mongoose.Types.ObjectId.isValid(cartId) ) {
        return res.status(422).send({
            message: `Provided id is not valid`
        });
    }
    const foundItem = await Cart.findOneAndUpdate({
        _id: cartId,//'items._id': itemId
    },{
        '$pull': {
            'items':{ '_id': itemId }
        },'$set': {
            'subTotal': {'items.total'}
        }
    });
} catch (error) {
    next(error)
}

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)