业务逻辑:加入商品到购物车,第一步拿到我们的用户信息,判断用户是否存在,存在,先得到该用户购物车的所以商品数据,若加入的商品存在于购物车中,则购物车中同一商品的数量加一,然后直接保存购物车数据库;若加入的商品不存在购物车中,则把它当成新的商品,从商品数据库中拿到详细的商品信息加入到购物车中,然后保存购物车数据库。
后端,在server/models/user.js添加新模型
var moogoose = require('mongoose');
let userSchema = new moogoose.Schema({
"userId":String,
"userName":String,
"userPwd":String,
"orderList":Array,
"cartList":[
{
"productId":String,
"productName":String,
"salePrice":String,
"productImage":String,
"checked":String,
"productNum":String
}],
"addressList":Array
});
module.exports = moogoose.model("User",userSchema)
在server/routes/goods.js中添加购物车二级路由 "/addCart",post请求
router.post('/addCart',function (req,res,next) {
var userId = '100000077', productId=req.body.productId; // 定义用户信息,和点击的商品Id号
var User = require('../models/user');
User.findOne({userId:userId},function (err,userDoc) { // 先获取到用户信息
if(err){
res.json({
status:'1',
msg:err.message
})
}else{
console.log("userDoc"+userDoc);
// 判断用户是否存在
if(userDoc){
let goodsItem = '';
// 存在,则获取该用户购物车的所以信息
userDoc.cartList.forEach(function(item){
if(item.productId == productId){ // 判断加入的商品在购物车中是否存在
goodsItem = item;
item.productNum++; // 存在则商品数量加一
}
});
if(goodsItem){
// 如果购物车中已经存在了加入的商品, 直接保存数据库
userDoc.save(function (err3,doc3) {
if(err3) {
res.json({
status: "1",
msg: err3.message
});
}else{
res.json({
status:'0',
msg:'',
result:'suc'
})
}
})
}else{
// 购物车中不存在该商品
// 从购物车中拿到一条数据插入进去
Goods.findOne({productId:productId},function (err1,doc){
if(err1){
res.json({
status:"1",
msg:err1.message
});
}else{
if(doc){
doc.productNum = 1; // 定义商品数量加一
doc.checked = 1;
userDoc.cartList.push(doc);
userDoc.save(function (err2,doc2) {
if(err2) {
res.json({
status: "1",
msg: err2.message
});
}else{
res.json({
status:'0',
msg:'',
result:'suc'
})
}
})
}
}
});
}
}
}
})
});
前端,views.GoodsList.vue中添加addCart方法,传入商品ID
addCart(productId){
axios.post("/goods/addCart",{
productId:productId
}).then(res=>{
if(res.status == 200){
alert("加入成功");
}else{
alert("msg:"+res.msg);
}
})
}