问题描述
我是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 (将#修改为@)