码code | 如何用云开发搭建电商后台服务

转载来源:腾讯云云开发
原作者:京东凹凸实验室

本文从Taro及小程序·云开发的简介开始,介绍了如何通过小程序·云开发搭建电商后台服务,最后再深入地阐述购物车页,订单页的小程序·云开发端处理逻辑,由浅入深地剖析了使用小程序·云开发开发电商后台服务的整个过程。

Taro简介

Taro是由凹凸实验室开源、遵循 React 语法规范的多端开发解决方案,截止目前 star 数已经突破16.9k,受到了前端开发者的广泛关注,成为了当前最受欢迎的小程序多端开发框架之一。
Taro 目前已支持微信小程序、H5、RN、支付宝小程序、百度小程序以及字节跳动小程序,持续迭代中的 Taro,也正在努力兼容更多的端,并增加支持一些新特性。

小程序·云开发简介

先看官方文档的说法:

小程序·云开发是微信团队联合腾讯云团队推出的一套小程序开发解决方案。小程序·云开发为开发者提供完整的云端流程,弱化后端和运维概念,开发者无需购买和管理底层计算资源,包括服务器、数据库、静态存储,只需使用平台提供的简易
API 进行核心业务等开发,实现快速上线和迭代,把握业务发展的黄金时期。

其实翻译过来就是,一个在小程序中使用的,不用购买服务器,不用运维的简易后端体系,主要是为了突出快和简便。所以小程序·云开发,就非常适合那些对数据本身弱依赖的,中小型的功能性小程序使用。

小程序·云开发主要有几大部分组成,分别是云控制台、数据库、云函数、云存储。以及分别在小程序端,和云端使用的 js-sdk、admin-sdk。关于这几部分的具体内容,可以在官方文档中查看。

而与传统的电商后端开发相比,小程序·云开发有以下区别:

传统电商后端开发小程序·云开发
后端代码自主编写、开发接口开发接口,云函数部署
服务器自主购买、部署
数据监控自主搭建官方提供,控制台查看
调用日志自主搭建官方提供,控制台查看
费用服务器购买成本
项目结构

因为该项目使用了小程序·云开发进行后端开发,故项目结构会有些不同。具体结构使用的是 Taro 初始化时提供的云开发模板,大致结构如下:

├── demo                          代码目录
|   ├── client                    小程序代码目录
|       ├── ...           
|   ├── cloud                     小程序·云开发相关代码目录
|       ├── functions             云函数相关目录
|           ├── shop              shop 云函数目录
|               ├── index.js      入口函数
|               ├── getShop.js    getShop.js
|               ├── package.json
|               ├── ...
|   ├── project.config.json       小程序配置文件
|   ├── tcb.json                  小程序·云开发配置文件
└── README.md                     readme 文件

可以看到目录里主要分了两大块 client和 cloud:

client 里和我们平常小程序的开发目录,存放的都是小程序里业务代码。

cloud 里则是放云函数相关的代码,并且是以模板进行分割,每个模块一个云函数。

基于这样的目录结构,小程序·云开发相关的代码与小程序本身的代码进行了有效分隔,极大地方便了项目的管理与开发,同时也有助于云函数的上线部署。

通过小程序通过小程序·云开发搭建电商后台服务

介绍完 Taro 及小程序·云开发,下面便开始讲解如何通过小程序·云开发搭建一个后端服务。

1.后台服务搭建思路
2.数据库建立
3.数据交互
4.【首页】【商详页】后端逻辑处理
5.【购物车】后端逻辑处理
6.【订单页】后端逻辑处理

后台服务搭建思路

首先,我们知道一个最简单的后端程序就是,开启一个 HTTP服务,连接上数据库,然后根据收到的请求进行相关操作,例如数据库的增删查改,返回 HTML,返回接口数据之类,如果要满足外网访问还要部署上线等等。

而用上了小程序·云开发之后,因为云函数这个概念,我们免去了开启服务器和部署的步骤。同时,小程序是天然前后端分离的,也不需要返回HTML。所以在这种情况下,我们所搭建的后台服务最主要为了实现两个部分的内容,分别是数据库的建立和前后端的数据交互。

1.数据库建立

数据库建立,指的是数据集合及一些初始数据的创建。在我们搭建的这个 Demo 里,主要有以下数据集合:
在这里插入图片描述
· Information - 首页的资讯数据集。主要是以一个资讯为单位的数据集合,一个资讯可能含有商店图片,商店介绍,商品介绍等,主要作导购作用,点击后引导至相关页面。
· Shop - 商店页的数据集。以商店为单位,一个商店页面里主要是各种楼层数据。
· Commodity - 商品的数据集。显然,一个商品数据自然就是该商品所需要的各种信息。
· Cart - 购物车的数据集。以用户为单位存放购物车数据。
· Order - 订单的数据集。以用户为单位存放订单数据。
· User - 用户信息的数据集。存放用户信息数据。

上面所讲述的 6个数据集,基本就涵盖了一个最简单的电商所需要的各种数据,可以构成一个完整的购物流程。

同时如下图,还可以设置数据集权限。例如将 Information、 Shop、Commodity设置为所有用户可读、仅管理员可写;将 Cart、 Order、 User改成仅创建者及管理员可读写。通过权限限制,增强了数据集的可靠性。
在这里插入图片描述
2.数据交互

数据集建立起来后,再往里面填充一些假数据,基本的数据就有了,那么在小程序中如何进行数据交互?

如果不是用小程序·云开发,自然是通过request拉取接口数据,进行展示。而在使用了小程序·云开发的情况下,通过官方提供的 sdk,主要有两种办法进行数据拉取:

1.直接在小程序端操作数据库,获取所需数据,并进行增删查改等操作。
2.使用云函数,把数据库的操作放到云端;然后在小程序端调用云函数,达到类似调用接口的效果。

第一种方法其实比较适合一些简单的、对数据要求不高、量也不大的小程序。不然在小程序的代码中混合着数据库操作,实践起来不太优雅,也不利于维护。

这里重点说下第二种方法。上篇文章有提到了云函数的概念,这里再回顾一下。所谓云函数,就是将一个函数放在Node.js(即服务端)环境下运行。因此,我们可以将数据库的操作放到云函数中执行,然后在小程序中调用云函数,达到一种类似调用接口的效果。回顾我们上一章节说到的云函数的目录:

├── demo                          代码目录
|   ├── cloud                     小程序·云开发相关代码目录
|       ├── functions             云函数相关目录
|           ├── shop              shop 云函数目录
|               ├── index.js      入口函数
|               ├── getShop.js    getShop.js
|               ├── package.json
|               ├── ...
|   ...
└── README.md                     readme 文件

名字叫 shop 的云函数的具体目录在cloud/functions/shop下,可以见到有一个入口文件 index.js,还有其它的子函数。下面看具体代码:
在这里插入图片描述在这里插入图片描述在这个例子中,笔者将一个云函数当成一个模块相关函数的入口,根据函数传入的参数来决定调用哪个函数。而被具体调用的函数,执行的是一些数据的操作,然后返回数据。也就是说,在这个 Demo 里一个云函数是一个数据模块的入口,里面引用了许多待被调用的具体函数,视入参而定。

以数据模块为单位分割云函数,是笔者觉得比较好的做法。一来云函数不必分割得太细,毕竟每个云函数都是独立部署的,省去了一些繁琐的操作;二来以数据模块为单位,就有点类似我们传统后端的 MVC 模式,易于开发者无缝接入。当然,这只是其中的一种云函数代码组织方式,并不代表就一定要遵循这样的方式,具体情况具体分析,还是要结合业务的实际情况。

而具体到小程序的调用,就更简单了,只是将请求接口的操作改为调用云函数的操作。比如:
在这里插入图片描述
可以看到,仅仅是将调用 wx.request改为了调用 wx.cloud.callFunction,其它的地方并不需要改变太多。返回的数据也是可以自己定义的,达到了与调用接口相同的效果。

不过云函数有一个缺点,就是每次都要上传部署后才能被小程序端调用,调试起来略显麻烦。一个比较好的调试方法是添加一个测试函数,在本地环境中使用 Node.js 进行测试。
在这里插入图片描述
2.1【首页】【商详页】后端逻辑处理

经过上一段落的讲解,相信大家对于整个商城后端服务的搭建与处理逻辑已经有了基本了解。下面我们看一下首页和商详页的页面结构。

首页:
在这里插入图片描述
商详页:
在这里插入图片描述
实际上,上一段落中所举例shop云函数,便是处理首页和商详页的后端逻辑。可以看到,其逻辑只是简单的根据id拉取数据并返回,因为整体也并没有过多与用户发生交互的部分,也没有需要后端逻辑处理的部分,总的来说还是比较简单的,在这里便不作过多介绍。

2.2【购物车】后端逻辑处理

购物车页相较于首页和商详页,其逻辑必定是复杂了很多,下面结合页面结构及代码分析一下。
在这里插入图片描述
上图是商城demo的购物车截图。可以看到在购物车里,小程序·云开发端需要处理的逻辑有商品的选择与反选、商品删除、商品数量的更改、商品型号的更改等等。因此,我们把购物车操作分类,得到如下一个 map:
在这里插入图片描述
然后,在用户执行相应的操作时,我们便会执行到对应的操作函数:
在这里插入图片描述
在这里,每个操作函数的入参都是 oldCartInfo(旧的购物车里的商品)、 skus(需要更改的 skus 数组)。然后返回处理后、最新的 newCartInfo (新的购物车里的商品)。具体的操作函数的逻辑我们便不再阐述了,主要就是对数组进行遍历然后根据相关操作处理数据。

接下来,根据最新 newCartInfo,来得到完整购物车数据,完整的购物车数据结构如下所示:
在这里插入图片描述
更新完数据库后,便会返回给前端最新的购物车数据。

总结下来,整个购物车后端逻辑的流程,可以用如下的流程图描述:
在这里插入图片描述
如果后续有新的购物车操作需要迭代,或者处理逻辑需要变更,我们也只需要改变小程序·云开发端执行函数 这一部分里面的内容即可。

2.3【订单页】后端逻辑处理

同样的,我们先看一下订单页的结构。

订单详情页:
在这里插入图片描述
订单页这块主要处理的是生成订单的逻辑。每个用户的购物车中,已勾选的商品数据都是存放在数据库中的,所以当用户点击了去结算按钮,触发了结算请求时,后端会直接从用户数据库中的购物车数据,生成一份订单。详细的流程可以用如下的流程图描述:
在这里插入图片描述
下面我们来看具体代码:
在这里插入图片描述
从代码中可以看到,先是遍历当前购物车中的商品,然后把已经勾选的商品存放到 payInfo中。接着根据 payInfo 生成订单数据,同时除移购物车中已被结算的商品,并更新购物车数据库。

整体来说,并没有太复杂的操作,不过需要注意的是,因为存在很多异步的操作,所以会有使用很多 await 命令来进行同步书写。

除了生成订单之外,还有取消订单、删除订单等操作。相较于生成订单,这些就只是读取订单、更改状态而已,便不赘叙。

总结

笔者作为开发者,使用小程序·云开发后,深感其便利性。私以为有以下几点优势:

  1. 便捷。略去了后端部署、运维等步骤,可以快速地构建所需要的后端应用,非常适合灵活轻便的小程序开发。

  2. 免费。目前小程序·云开发提供了免费 2GB 的数据库存储和 免费 5 GB 的文件存储,虽然存储量并不是很大,但对于个人开发者来说,这些存储量绰绰有余。

  3. 开发简单。小程序·云开发的使用,云函数的开发都是非常简单的,官方提供的API可以让我们便捷地进行操作。只需掌握 JavaScript 和一些异步处理相关的知识,便可以快速上手。

  4. 一致性。小程序·云开发是小程序官方推出的一种解决方案,与正常的小程序开发无缝连接,而且不用担心是否会继续维护、升级迭代等的问题。

最后希望这篇文章对于看完的你有所帮助!
在这里插入图片描述

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
技术选型1,前端微信小程序原生框架cssJavaScript2,管理后台云开发Cms内容管理系统web网页3,数据后台小程序云开发云函数云数据库云存储 1,小程序端1-1,首页首页有以下几个功能点点餐菜单浏览排号等位拨打电话顶部轮播图搜索菜品这里点餐分两种1,可以设置直接点餐直接点餐:适合小型饭店,或者奶茶类的快餐店。直接就可以下单,不用识别桌号2,也可设置扫点餐扫点餐适合中大型饭店,可以区分桌号,方便管理我后面会教大家如何生成桌号二维,只需要把对应桌号的二维贴在餐桌上,用户点击 扫点餐 识别二维,即可获取到桌号信息。1-2,菜品浏览页菜品浏览分两种1,不带分类适合菜品少的时候2,带分类菜品多的时候,带分类更方便客户选择不带分类 带分类 1-3,搜索功能我们这里搜索有两个触发方式1,直接点击搜索图标2,点击键盘上的搜索键1-4,搜索结果,支持模糊查询如我这里只搜‘鱼’,那么菜品中所有包含鱼的都可以搜索到 1-5,购物车首先菜品列表页可以直接添加商品到购物车购物车弹起后可以做如下操作1,增删单个菜品2,清空购物车3,删除菜品这些操作都和菜品列表是联动的,也就是菜品列表和购物车里增删个数,都是可以同步的。我会在项目预览章节的视频里做具体演示。1-6,下单页下单页就是确认订单后进行下单支付的。有以下功能1,点餐明细2,价格计算3,桌号地址4,就餐人数5,添加备注6,点击下单1-7,支付页支付页分两种方式1,模拟支付适合前期学习,毕业设计等演示类的场景。2,真实微信支付适合商用,但是使用微信支付必须要有营业执照,所以前期如果只是学习的话,建议使用模拟支付。 1-8,我的订单页我的订单页分以下几个状态1,新下单待上餐2,已上餐待评价3,订单完成4,订单取消1-9,提交评论页我们可以对店家进行评论。 1-10,评价列表页可以查看所有评价和自己的评价 1-11,排号等位可以看出,我们可以选择就餐人数,排大桌或者小桌。我这里已排小桌为例通过上图可以看出1,当前排号情况2,我的排号3,可以重新排号4,到号时会有到号提示后面我会把订阅消息功能加进来,这样到号后会有订阅消息提示。 1-12,个人中心个人中心分登录和未登录两种状态未登录已登录 1-13,微信授权登录小程序 2,后厨端和排号管理端2-1,后厨端主要供后厨的厨师使用1,可以查看当前新下单2,完成后可以操作菜品完成3,可以监听用户新下单4,有新订单时会有语音提示5,厨师登录页语音提示我会在视频课里具体演示厨师登录页 厨师管理页可以查看待制作订单用户新下单后,会有语音提示 2-2,排号管理页同样也有登录页,和上面厨师登录一样,这里重点看下排号管理页管理员可以查看当前排号情况,可以叫号。3,cms管理后台我们这里的可视化网页后台使用的时云开发自带的cms(内容管理)3-1,登录页 3-2,管理后台我们可以在这里 1,添加轮播图,删除轮播图,修改轮播图2,添加菜品,删除菜品,修改菜品,上架下架菜品3,管理订单4,查看评价5,管理后厨和排号管理员6,查看排号数据  比如我查询某个用户的所有订单 查询所有新下单还未上菜的订单 还有更多的功能,我会在视频课里给大家用视频来演示,这样更直观。 4,数据库数据库我们这里用云开发自带的云数据库餐厅管理员查看趋势图

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值