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

  • 1、加入购物车业务逻辑
    • 1.1 创建购物车模块 myapp/routes/cart.js
    • 1.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、获取用户idlet { 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 = datalet 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系列之订单接口的实现

四、node系列之购物车的业务逻辑相关推荐

  1. php购物车订单业务逻辑,购物车业务逻辑

    在现实生活中,购物车是在超市.商店购物时存放商品的地方,而在网络购物中,是对现实的购物车而喻,买家可以像在超市里购物一样,随意 添加.删除商品,选购完毕后,统一下单. 为什么购物车的设计很重要? (1 ...

  2. 界面层与业务逻辑层分离

    原文连接:http://blog.csdn.net/sasoritattoo/article/details/8005331 看到这里的帖子http://topic.csdn.net/u/200808 ...

  3. uni-app/Vue实现 购物车页面功能的业务逻辑

    uni-app/Vue实现 购物车页面功能的业务逻辑 用户在商品列表页或者商品详情页进行添加到购物车操作.把此商品需要在购物车渲染的数据整理好一个对象,转存到Vuex中 在购物车页面渲染列表数据 购物 ...

  4. (转)淘淘商城系列——在业务逻辑中添加缓存

    http://blog.csdn.net/yerenyuan_pku/article/details/72871268 上文我们一起学习了如何使用Spring容器来管理Redis单机版和集群版实现,本 ...

  5. C#学习笔记(四):.net 第一个业务逻辑(同名用户不可创建)(优化逻辑)

    上篇文章是博主第一次使用.net+EF处理业务逻辑,也是第一次使用C#编写项目代码,作为一个copier,找到了一个可行的 方法在别人模块去copy了一个类似的数据获取方式来修改使用,结果算比较顺利, ...

  6. 系统架构师-基础到企业应用架构-业务逻辑层

    一.上章回顾 上章我们主要讲述了系统设计规范与原则中的具体原则与规范及如何实现满足规范的设计,我们也讲述了通过分离功能点的方式来实现,而在软件开发过程中的具 体实现方式简单的分为面向过程与面向对象的开 ...

  7. 系统架构之业务逻辑层

    一.上章回顾 上章我们主要讲述了系统设计规范与原则中的具体原则与规范及如何实现满足规范的设计,我们也讲述了通过分离功能点的方式来实现,而在软件开发过程中的具 体实现方式简单的分为面向过程与面向对象的开 ...

  8. 系统架构师谈企业应用架构之业务逻辑层

    一.上章回顾 上章我们主要讲述了系统设计规范与原则中的具体原则与规范及如何实现满足规范的设计,我们也讲述了通过分离功能点的方式来实现,而在软件开发过程中的具体实现方式简单的分为面向过程与面向对象的开发 ...

  9. ntdll 异常代码0xc0000374_不要把异常当做业务逻辑,这性能可能你无法承受

    一:背景 1. 讲故事 在项目中摸爬滚打几年,应该或多或少的见过有人把异常当做业务逻辑处理的情况(┬_┬),比如说判断一个数字是否为整数,就想当然的用try catch包起来,再进行 int.Pars ...

最新文章

  1. 基于Springboot实现作业管理系统
  2. Spring Bean 装配和依赖注入
  3. CodeForces 157C Message
  4. Spring的事务传播性
  5. 如何获取Kafka的消费者详情——从Scala到Java的切换
  6. 39页作业(还款年限—月还款额表)
  7. 利用 pywin32 操作 excel
  8. StringBuilder 和 String拼接10万个字符串的速度测试差别太大了
  9. 2010 北大软件及微电子学院 《软件实现技术》小组博客
  10. python某公司为员工发放奖品_python实现年会抽奖程序
  11. 我的台式机的几张照片
  12. 使用mmdetection检测并存储结果
  13. pgAdmin 4 v4.0 发布
  14. c语言如何输出数组最大值和最小值,C语言输出数组中最大和次大的数
  15. 旅游吧!我在这里—旅游相册POI搜索:找回你的足迹
  16. Someone Like You 《另寻沧海》
  17. 节奏大师显示服务器,节奏大师上线首日登录困难 服务器拖累腾讯游戏
  18. 定时任务的corn表达式
  19. 又爆作弊丑闻?AAAI 2023审稿人被作者找上门,才发现rebuttal阶段审稿人互相可见!...
  20. AIGC用于智能写作的技术综述-达观数据

热门文章

  1. 开关稳压电源软件设计
  2. linux I2c设备注册
  3. mac Axure RP 8 授权码 以及汉化
  4. LogicFlow与原生BPMN的对比
  5. Java中的增强for循环和break continue的使用 以及流程控制训练
  6. Vue3 - props
  7. 元宵节一起来炸汤(chu)圆(fang)
  8. Aurora 8b/10b 协议和IP核设置
  9. BGP 十一条选路原则与BGP路由传递的注意事项介绍
  10. Linux基础(2)/Linux 基本概念及操作