node系列之购物车的业务逻辑
在第 二个章节中讲解了用户的登陆注册,在第 三个章节中讲解了产品的相关接口设计,本章节中讲解的购物车的相关逻辑
1、加入购物车业务逻辑
1.1 创建购物车模块 myapp/routes/cart.js
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
res.send('购物车')
});
module.exports = router;
1.2 app.js中注册路由
var cartRouter = require('./routes/cart');
app.use('/cart', cartRouter);
1.3 设计购物车的数据库集合
// sql/collection/carts.js
const mongoose = require('../db.js'); // 引入数据库连接模块
const Schema = mongoose.Schema; // 拿到当前数据库相应的集合对象
const cartSchema = new Schema({
cartid: {type: String },
userid: { type: String },
proid: { type: String },
num: { type: Number }
})
module.exports = mongoose.model('Cart', cartSchema);
1.4 加入购物车业务逻辑
如果用户之前添加过当前商品需要更新数量
加入购物车需要参数用户id、产品id以及商品数量
// 加入购物车 购物车数据id 产品id 用户id 产品的数量num
router.get('/add', (req, res, next) => {
// 1、获取数据
let { userid, proid, num } = req.query;
num = num * 1 || 1 // 设定默认数量
// 2、加入购物车
// 如果当前用户的购物车中有这个产品,数量加1,否则加入
sql.find(Cart, { userid, proid }, { _id: 0 }).then(data => {
if (data.length === 0) {
// 2.1没有改数据 --- 插入数据库操作
sql.insert(Cart, {
cartid: 'cart_' + uuid.v1(),
userid,
proid,
num
}).then(() => {
res.send({
code: '200',
message: '加入购物车成功'
})
})
} else {
// 2.2更新数据库中购物车产品的数量
sql.update(Cart, { userid, proid }, { $inc: { num: 1 } }).then(() => {
res.send({
code: '200',
message: '加入购物车成功'
})
})
}
})
})
2、查看购物车业务逻辑
依据用户id获取所有该用户的购物车数据,然后依据产品id依次查询产品集合,获取购物车需要的数据,最后返回
router.get('/', function(req, res, next) {
// 1、获取用户id
let { userid } = req.query;
let cartarr = []
// 2、依据用户id查询购物车的数据
sql.find(Cart, { userid }, { _id: 0 }).then(data => {
// 如果没有数据,告诉用户没有数据
if (data.length === 0) {
// 2.1 没有数据
res.send(utils.cartnull)
} else {
cartarr = data
let promise1 = data.map(item => {
return sql.find(Pro, { proid: item.proid}, { _id: 0})
})
return Promise.all(promise1)
}
}).then(list => {
console.log('list', list)
console.log('cartarr', cartarr)
let arr = []
list.map((item, index) => {
arr.push({
proid: item[0].proid,
proname: item[0].proname,
proimg: item[0].proimg,
price: item[0].price,
cartid: cartarr[index].cartid,
userid: cartarr[index].userid,
num: cartarr[index].num
})
})
res.send({
code: '200',
data: arr
})
})
});
3、删除购物车数据
删除哪个用户添加的哪个商品
// 删除购物车
router.get('/delete', (req, res, next) => {
// 1、获取删除的条件
let { userid, proid } = req.query
// 2、删除
sql.delete(Cart, { userid, proid }).then(() => {
res.send(utils.deletesuccess)
})
})
4、更新购物车数据
根据购物车的id 修改商品的数量
// 更新购物车
router.get('/update', (req, res, next) => {
// 1、获取更新的数据
let { cartid, num } = req.query
// 2、更新数据
sql.update(Cart, { cartid }, { $set: { num: num } }).then(() => {
res.send(utils.updatesuccess)
})
})
5、预告
下次分享node系列之订单接口的实现