使用express-session数组变量实现购物车时数据丢失问题解决
购物车session数据丢失问题修复方案
你的核心问题是每次调用/addtocart接口时,都强制把req.session.cart重置成了空数组,导致之前添加的商品数据被清空,只会保留最后一次添加的内容。
修复后的代码如下:
router.post('/addtocart', authCheck.login, (req, res) => { // 仅当cart不存在时才初始化为空数组,避免清空已有数据 req.session.cart = req.session.cart || [] let doc = { ...req.body } // push是同步操作,不需要await req.session.cart.push(doc) // 手动保存session(部分session存储驱动需要这一步确保修改生效) req.session.save(err => { if (err) { console.error('保存session失败:', err) return res.status(500).send('添加购物车失败') } console.log(req.session.cart) res.send('商品已添加到购物车') }) })
关键改动说明:
- 替换
req.session.cart = []为req.session.cart = req.session.cart || []:这样只有当session中还没有cart数组时才会初始化,不会覆盖已有数据 - 移除
await:数组的push方法是同步操作,不需要使用异步等待 - 添加
req.session.save():部分session存储(比如文件存储、数据库存储)需要手动调用save方法,才能将修改后的session数据持久化,避免重启服务或请求结束后数据丢失
内容的提问来源于stack exchange,提问作者devofto
相关产品推荐
相关产品推荐

