四、node系列之购物车的业务逻辑

mac2024-04-01  61

node系列之购物车的业务逻辑

1、加入购物车业务逻辑1.1 创建购物车模块 myapp/routes/cart.js1.2 app.js中注册路由1.3 设计购物车的数据库集合1.4 加入购物车业务逻辑 2、查看购物车业务逻辑3、删除购物车数据4、更新购物车数据5、预告 在第 二个章节中讲解了用户的登陆注册,在第 三个章节中讲解了产品的相关接口设计,本章节中讲解的购物车的相关逻辑

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系列之订单接口的实现

最新回复(0)