Node.js购物车添加商品时totalQty无法正常自增问题求助
问题修复方案
核心错误点
Cart构造函数初始化逻辑错误:totalQty、totalPrice的赋值语句为布尔判断表达式,最终会被赋值为布尔值true/false,而非数字,导致自增逻辑完全失效addProduct方法存储逻辑错误:每次调用都会直接覆盖productItems的全部内容,没有按传入的商品ID做区分存储,无法保留历史购物车数据- 分支判断逻辑错误:执行判断前已经给
storedItem赋值了新对象,!storedItem判断永远为假,新商品初始化分支永远不会执行 - 价格累加逻辑错误:
totalPrice累加时使用了单商品的累计总价,会导致总金额计算重复
修正后代码
购物车逻辑模块
module.exports = function Cart(oldCart) { this.productItems = oldCart.productItems || {}; // 修正初始化逻辑,保证初始值为数字0 this.totalQty = oldCart.totalQty ?? 0; this.totalPrice = oldCart.totalPrice ?? 0; this.addProduct = function(item, id) { // 按商品ID查询已有购物车项 let storedItem = this.productItems[id]; // 不存在对应商品时才初始化新条目 if (!storedItem){ storedItem = this.productItems[id] = {item: item, qty: 0, price: 0}; console.log("stored is empty") } console.log("Stored item full!") // 累加数量、更新单商品总价、更新购物车全局统计 storedItem.qty++; storedItem.price = storedItem.item.price * storedItem.qty; this.totalQty++; // 总金额仅累加单个商品的单价 this.totalPrice += storedItem.item.price; } this.generateArray = function () { let arr = []; for (let id in this.productItems) { arr.push(this.productItems[id]); } return arr; } };
额外注意事项
如果你使用的是Express框架,需要先配置body-parser中间件才能正常读取req.body.cart内容,否则每次请求都会初始化空购物车,同样会导致数量无法累加。
内容的提问来源于stack exchange,提问作者Jan Tuđan
相关产品推荐
相关产品推荐

