NodeJS-Express接口报Cannot read property of null问题咨询
问题原因
报错的本质是部分购物车条目关联的商品数据不存在,导致populate执行后对应的item.product为null,尝试访问null的name属性时触发类型错误。console.log(item.product)有正常输出是因为循环遍历的多条购物车条目里,前面的条目关联的商品均正常,只有某一条/某几条的关联商品已被删除,程序运行到这条异常数据时才崩溃,控制台打印的是前面正常条目的输出,很容易忽略存在异常数据的情况。
修复方案
遍历购物车条目时增加空值判断,跳过关联商品不存在的无效条目,同时建议给图片字段也增加兜底判断,避免商品没有配图时出现类似报错:
exports.getCartItems = (req, res) => { Cart.findOne({ user: req.user._id }) .populate("cartItems.product", "_id name price productPictures") .exec((error, cart) => { if (error) return res.status(400).json({ error }); if (cart) { let cartItems = {}; cart.cartItems.forEach((item, index) => { console.log(item.product); // 关联商品不存在则跳过当前条目,也可根据业务需求额外做删除无效购物车项的处理 if (!item.product) return; // 商品配图为空时兜底,避免数组索引报错,可自行替换为默认占位图地址 const coverImg = item.product.productPictures?.[0]?.img || ''; cartItems[item.product._id.toString()] = { _id: item.product._id.toString(), name: item.product.name, img: coverImg, price: item.product.price, qty: item.quantity, }; }); res.status(200).json({ cartItems }); } }); };
如果需要从根源避免这类问题,可以在删除商品的逻辑中,同步清理所有用户购物车中关联了该商品的无效条目,从数据层面保证关联关系的一致性。
内容的提问来源于stack exchange,提问作者Korlahwarleh
相关产品推荐
相关产品推荐

