- 建模:
sequelize model:generate --name Cart --attributes productId:integer,userId:integer,number:integer
推模: sequelize db:migrate
- 创建一个 cart.js, 然后在app.js中引入这个文件
- 为调试方便,先在路由中间件中,加上不要验证cart路由地址
- 因为当前购物车表和商品表还有用户表(购物车商品属于哪个用户),所以要建立关联:
- 在 cart.js里 创建一个 post接口: 根据小程序扫到的条形码 ,来搜索Product商品表里面有没有这个 条形码对应的商品
- 如果Product表里 ,没有这个条形码的商品:
- 如果Product表里, 有这个商品: 就查询这个商品 在不在购物车Cart表中
- 如果购物车Cart表里 没有这个商品, 就在购物车添加这个商品
- 如果购物车表中 已经有这个商品存在 , 就把当前的商品数量 number增加1
- 代码:
var express = require('express');
var router = express.Router();
var models = require('../../models')
router.post('/',async function(req,res,next){
var code = req.body.code;// 这里的code是 扫描进去的条形码
// 1.根据扫入的条形码 来搜索 Product表中,有没有这个商品
let product = await models.Product.findOne({
where:{
code:code,
}
})
// 2.如果Product表中没有这个商品,就返回
if(!product){
res.json({success:false,message:'此商品不存在'})
return;
}
// 3.如果Product表中有这个商品,
// 就查询这个商品 在不在购物车Cart表中 created:不存在为true,存在false
let [cart,created] = await models.Cart.findOrCreate({
where:{
productId:product.id,
userId: 9/*req.decoded.user.id*/
},
// 如果这个商品不在购物车中的话, 就把这个商品添加进购物车
defaults:{
number:1,
userId: 9 /*req.defaults.user.id*/,
productId:product.id
}
})
// 4. 9.如果购物车表中 已经有这个商品存在
if(!created){
let cart = await models.Cart.findOne({
where:{productId:product.id}
})
cart.increment('number')// 就把当前的商品数量 number增加1
return res.json({success:true,message:'增加成功'})
}
res.json({success:true,message:'添加成功',data:cart})
})
module.exports = router;