加入 cookie-parser, express-session
npm i cookie-parser express-session
利用 session 紀錄使用者資料
// routes/index.js
router.post('/cart', cartController.postCart)
// controllers/cartController.js
const db = require('../models')
const Cart = db.Cart
const CartItem = db.CartItem
const cartController = {
// 取所有產品
getCart: async (req, res) => {
try {
let cart = await Cart.findByPk(req.session.cartId, { include: 'items' })
cart = cart || { items: [] }
const totalPrice = cart.items.length > 0 ? cart.items.map(d => d.price * d.CartItem.quantity).reduce((a, b) => a + b) : 0
return res.render('cart', { cart, totalPrice })
} catch (e) {
console.log(e)
}
},
// 加入購物車
postCart: async (req, res) => {
try {
const [cart] = await Cart.findOrCreate({
where:
{ id: req.session.cartId || 0 }
})
const [product, created] = await CartItem.findOrCreate({
where: {
CartId: cart.id,
ProductId: req.body.productId
},
defaults: {
quantity: 1
}
})
if (!created) { product.quantity += 1 }
await product.save()
req.session.cartId = cart.id
return res.status(200).redirect('back')
} catch (e) {
console.log(e)
}
}
}
module.exports = cartController