微信小程序云开发快速入门

news2024/10/7 16:26:55

什么是云开发?

云开发是可以帮助我们快速成为全栈的一种后端云服务,采用的是Serverless的架构。开发者无须搭建服务器,可直接使用其中的云数据库、云存储、云函数等云服务基础功能。

那么这个时候你可能会想,这和现在的传统开发模式有什么区别呢?下面通过现实生活中盖房子的过程来了解传统开发模式与云开发模式的区别。

如果传统方式来盖房子需要6步:
1)将房子的地基打好,设计整理结构。(后端云服务基础架构)
2)打地梁,地梁也是决定房子是否稳固的关键。(搭建云数据库)
3)主体的砌筑,将房子的基本结构盖好。(搭建云存储)
4)在步屋内填上土,砸夯,将地面砸实。(搭建云函数)
5)在屋顶铺上水泥,封实。(提供静态托管和扩展能力)
6)装修成自己喜欢的风格。(编写业务需求逻辑代码)

而云开发模式只有一步,即装修成自己喜欢的风格。可以看到图1-1展示的是传统开发需要管理的基础资源与云开发需要管理的基础资源的对比,可以帮助我们更清晰的了解两者之间的差距。

f9cf0202307271118001472.png

图1-1 传统开发需要管理的基础资源VS云开发需要管理的基础资源

就这一步即可。云开发提供完整的后端云服务,提供数据库、存储、函数、静态托管等基础能力,以及扩展能力,无须管理基础架构。相比较传统的开发模式,云开发至少可节省50%的人力成本、交付效率提升70%。

云开发模式调整

在此之前我们需要把原来码仔备忘录项目改成云开发项目,所以需要先把项目从项目管理中先删除。(如果是直接新建的云开发项目可以忽略这一步)

首先,先进入小程序项目管理页面:

a1f7b202307271118224821.png

然后点击右上角「管理」按钮进入该页面的管理状态。

2c868202307271118349620.png

然后选中你之前的单机版本勾选进行删除即可。

59f67202307271118457997.png

接下来我们在导入项目界面对云开发进行勾选即可。

b4e61202307271118555640.png

这个时候进入我们会发现小程序开发工具自动给我们生成了一套云开发Demo,我们先直接处理掉。

a14e8202307271119056346.png

1dab2202307271140236819.png

1e8c0202307271119137542.png

意思就是找不到小程序云开Demo代码的里面的一些模块,这个不用理会直接先把Demo代码全部删除。

02617202307271119224871.png

删除后我们就可以看到正常的页面渲染了。

cf411202307271119314729.png

回到正常状态下,我们接下来要改造的就是数据操作这块的业务。

数据缓存改造云开发

在改造之前我们先要梳理思路。

  1. 首先我们先通过之前学习过抽象方法。
  2. 把所有和数据操作相关的方法都抽取到一个js类里面,这样便于维护。
  3. 将所有的方法替换成云数据库的操作函数。

抽象数据操作API

我们在根目录下面新增 api 的文件夹,然后在其文件夹下面新增一个 memo.js 用于存放所有备忘录的操作API。

782e8202307271119468540.png

梳理下有哪些方法:

  1. 获取备忘录列表
  2. 获取备忘录详情
  3. 新增备忘录信息
  4. 删除备忘录信息
  5. 修改备忘录信息

先给相关的方法取好函数名称,然后进行导出声明。
memo.js 完整代码

3c53f202307271138124393.png

首先我们来实现获取备忘录列表,在列表页面 onShow 函数中会被调用。

6c892202307271132413221.png

在这个时候setData是页面操作函数,所以我们要抽象的部分是:

3953d202307271132507074.png

接下来我们就把这段代码放在memo.js里面去。

memo.js 关于 getMemoList 的代码片段

fd710202307271133053889.png

然后替换成列表页面的调用,先引入memo的获取 getMemoList 函数。
list.js 头部引入代码片段

ec80920230727113321184.png

引入后在 onShow 函数中使用
在 onShow 所有代码片段

701bd202307271133313579.png

采取同样的方式,我们可以把之前的获取详情、删除、修改都抽象到 memo.js 中:
memo.js 所有代码

77ddb202307271138491596.png

在相应业务场景进行调用,调用之前都要先引入方法才行。由于引入代码相对重复,下面就不贴引入代码了,只贴使用代码。

删除代码方法调用:
list.js 中 del 函数所有代码

27ce020230727113349464.png

查看备忘录详情调用:
edit.js 中 onLoad 函数所有代码

cd54b202307271133594772.png

新增和删除方法调用:
edit.js 中 save 函数中的关于保存和修改的代码片段

5ba61202307271134119380.png

到这里我们就完成了第一步,先抽取数据操作对象,然后我们要进行云数据库到操作了。

操作云数据库

初始化数据库

首先我们先进入云开发控制台。

a1dc0202307271120312319.png

然后选中「数据库」。

云开发提供了一个 JSON 数据库,顾名思义,数据库中的每条记录都是一个 JSON 格式的对象。一个数据库可以有多个集合(相当于关系型数据中的表),集合可看做一个 JSON 数组,数组中的每个对象就是一条记录,记录的格式是 JSON 对象。

9de04202307271120419248.png

我们会发现没有可用的集合,再次新建一个集合 memo,用于存放备忘录数据。

dc1b9202307271120513123.png

新增一条数据

我们先手动新增一条测试数据看看,点击「添加记录」。

18f39202307271121009958.png

e3655202307271134265548.png

我们用以上测试数据添加进去

aa610202307271121127561.png

除此之外我们可以看到可以添加多种不同类型的数据,云开发数据库提供以下几种数据类型:

  • String:字符串
  • Number:数字
  • Object:对象
  • Array:数组
  • Bool:布尔值
  • Date:时间
  • Geo:多种地理位置类型
  • Null

我们先默认都用 string 类型的数据,新增完成之后就可以做memo集合中看到一条数据了。

94c01202307271121258093.png

数据表已经有数据了,那么我们怎么获取?

获取数据库数据

我们回到小程序编辑台,对我们的获取数据方法进行下改造。

5c339202307271134379568.png

这个是获取本地的数据方法,下面是获取数据库方法

bd699202307271134475113.png

当我们去列表页面进行调用的时候发现报错:

9a166202307271121414021.png

原来是在此之前还需要进行云API的初始化。
那么现在问题来了,我们后续会遇到大量的调用云API,那么都需要一开始初始化,并且这个初始化只需要一次,这个时候初始化我们应该在哪里进行调用呢?
当一个函数应用一开始就需要调用的时候并且只需要调用一次,我们可以在app.js的 onLaunch 生命周期中调用。
app.js 的 onLaunch 函数代码片段

ebc0820230727113456881.png

接下来在看调用看看,在这里告诉大家一个调试技巧,使用调试器中的Network面板,然后选中Cloud标签进行过滤,在这里我们就可以刚才调用API请求。

62ef9202307271121577173.png

先看看请求状态,从状态来看是成功的请求。

a1eb0202307271122105973.png

然后我们再来看看返回的数据:

a9d72202307271122191189.png

明明有一条数据,为什么获取不到呢?
因为云开发数据库集合读取权限问题。默认我们新建的集合读取权限是仅创建则可以读写,第一条测试数据是我们手动录入的,所以没有创建者,默认权限于是就读取不到。
我们可以来到云开发控制面板,然后找到 数据库=> 数据权限。

84c91202307271122287273.png

我们把权限从「仅创建者可读写」修改为「所有用户可读,仅创建者可读写」试试看。修改完成之后再次调用获取方法,看到返回结果中出现了这条测试数据。

e67bf202307271122374093.png

虽然数据出来了,但是我们会发现还有一个错误日志。

fef99202307271122464795.png

具体代码块:

00eb2202307271122559727.png

原因:在没有使用云API之前我们使用的缓存操作API是同步操作返回了具体数据,而修改后的获取数据方法是异步函数,没有给到数据到列表页面进行使用。最终导致list数据对象为空,list的length自然就出现了undefined的错误提示。

从数据库获取数据除了可以用以上的实现 success 方法,同样还支持可以用 Promise 风格调用:
可以简单理解成将包裹的回调函数调用方式改成了链式调用的回调函数

8f553202307271135102375.png

基于 Promise 风格调用,我们可以将函数拆解成两部分。接下来再改造一下,传递数据的部分代码:

1.将查询代码在 getMemoList 完成

6fb93202307271135244593.png

2.将查询结果在列表页面进行列表渲染

cba9f202307271135359024.png

这样我们就成功的将数据库的数据显示出来了

7473c202307271123157335.png

接下来,我们就来把所有方法进行云API的实现。

查看数据详情

在这里我们就不能用index下标来,通常与后端交互我们都会采用ID来进行查询,每条数据都会生成一个ID字段,字段名称为_id。

19b7620230727112327362.png

e0887202307271142282107.png

a9194202307271131058492.png

获取id进行页面传递

92128202307271136021843.png

查询方法改造,由于通过id查询是非常常用的方法,所以云API直接有个doc方法传入id即可查询:
memo.js 中 getMemoInfo 函数代码

533eb202307271136111713.png

查询方法调用:
edit.js 中 onLoad 函数代码

0cac4202307271136209062.png

新增备忘录数据

新增方法改造:
memo.js 中 addMemoInfo 函数

0b2fb20230727113629407.png

调用方法:
edit.js 中 save 函数新增逻辑代码片段

7f1b8202307271136406222.png

新增成功后会返回新增数据的id信息。

3d072202307271123576487.png

然后在数据库当中就可以看到新增的数据了。

d2ec6202307271124076802.png

5c01c202307271142489687.png

ba8a4202307271124196589.png

然后在看下列表返回的数据,只有自己新增的那条数据了。

e7e16202307271124282584.png

修改备忘录数据

修改方法改造:
memo.js 中 updateMemoInfo 函数。

e4a6f202307271136505664.png

之前修改的逻辑是采用的删除之后再新增做的“假”修改,这次我们直接采用修改方法。
edit.js 中 save 函数修改逻辑代码片段

fdd22202307271136585575.png

返回结果中的 updated 是代表修改成功数据的数量

ec921202307271124445665.png

删除备忘录数据

删除方法改造:
memo.js 中 deleteMemoInfo 函数

dc1a6202307271137078113.png

调用方法:
list.js 中 del 函数

761b4202307271137218586.png

在这里要注意的是删除之后还需要调用查询所有数据方法对列表更新。

50bf9202307271125036092.png

返回值 removed 为删除数量。

总结

在本小节我们使用云API在小程序端操作了云数据库,学习了以下函数:

  • 使用 get() 进行了数据库的查询
  • 使用 add() 进行了数据添加
  • 使用 update() 进行了数据修改
  • 使用 remove() 进行了数据删除

在这里我们就已经完成了使用云数据库来存储备忘录数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/800178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Educational Codeforces Round 152 (Rated for Div. 2) D题 1849D Array Painting

传送门 https://codeforces.com/contest/1849/problem/D D. Array Painting 题意 题解 分类讨论 这题的精髓在于欠债 用一个a0表示当前有没有负债 当前欠债最多为1 首先我们讨论, 在不欠债的情况下遇到0是怎么模拟的: 前面有能够产生贡献的12连通块 例如: 12110 很明显答案…

vue element ui el-tree 通过子节点反向递归查找父节点

今天做了一个项目采用的是element tree组件,要求子父节点不强关联,但是当我点击子节点时,会反向的选择所有的父节点,如下图: 当我点击电话时,往上一层的“电话”和“我的”均为父级以上的节点,全…

Practice1|1207. 独一无二的出现次数、1365. 有多少小于当前数字的数字、941. 有效的山脉数组

1207. 独一无二的出现次数 1.题目: 给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。 如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。 示例 1: 输入:arr [1,2,2,1,1,3…

安卓的播放器对比与选型(vlc,EXOplayer,Ijkplayer,GSYVideoPlayer)详细过程

安卓的播放器对比与选型(vlc,EXOplayer,Ijkplayer,GSYVideoPlayer)📺详细过程 前言一、vlc二、EXOplayer三、Ijkplayer四、GSYVideoPlayer🔥🔥🔥五、其他的开源播放器jia…

婚庆服务小程序app开发方案详解

开发一款婚庆行业服务小程序有哪些功能呢? 1、选择分类 选择婚庆、婚车、婚宴、司仪、彩妆、婚庆用品、跟拍、摄影等,筛选出对应的商家 2、选择商家 选择分类后,可以选择商家,查看各个商家的详细介绍情况。 3、选择服务套餐 各…

Linux虚拟机(lvm)报Unmount and run xfs_repair

问题 linux系统没有正常关机,今天启动虚拟机无法进入系统,提示metadata corruption deleted at xxxx; Unmount and run xfs_repair 分析 主机异常掉电后里面的虚拟机无法启动,主要是损坏的分区 解决 看出来应该是dm-0分区损坏…

应急响应经典案例-FTP 暴力破解

应急响应经典案例-FTP 暴力破解 应急场景日志分析应急处理措施 应急场景 从昨天开始,网站响应速度变得缓慢,网站服务器登录上去非常卡,重启服务器就能保证一段时间的正常访问,网站响应状态时而飞快时而缓慢,多数时间是…

华为云安装MySQL后,本地工具连接MySQL失败

华为云安装MySQL后,本地连接失败 排查问题步骤: 在此之前需要在MySQL创建用户,并赋予权限。 1、能否ping通。 在本地命令行(Windows:winR)通过ping命令,ping服务器地址,看能否ping通。不能则需要检查本地…

Redis服务优化

目录 一.Rde高可用 二.Rdies持久化 2.1持久化的功能 2.2Redis 提供两种方式进行持久化 三.RDB持久化 3.1触发条件 3.1.1手动触发 3.1.2自动触发 3.1.3其他自动触发机制 3.1.4执行流程 3.1.5启动时加载 四.AOF持久化 4.1开启AOF 4.2执行流程 4.2.1命令追加(append) 4.2.2文件写…

ThinkPHP8知识详解:安装ThinkPHP8

我们在讲解前面的文章《搭建PHP8集成环境》和《给PHP8和MySQL8添加到环境变量》以后,现在可以正式的安装ThinkPHP8啦、 1、打开phpenv,启动服务,打开昨天新建的tp8.com的目录(D:\phpEnv\www\tp8.com),把里…

LLM系列 | 18 : 如何用LangChain进行网页问答

简介 一夕轻雷落万丝,霁光浮瓦碧参差。 紧接之前LangChain专题文章: 15:如何用LangChain做长文档问答?16:如何基于LangChain打造联网版ChatGPT?17:ChatGPT应用框架LangChain速成大法 今天这篇小作文是LangChain实践专题的第4…

关于element ui 安装失败的问题解决方法并查看是否安装成功

报错信息: 解决办法: 使用命令: npm install --legacy-peer-deps element-ui --save 查看是否安装成功: 方法一:在package.json文件中查看是否有element-ui版本 方法二:查看node_modules目录下是否有elem…

宝塔设置云服务器mysql端口转发,实现本地电脑访问云mysql

环境:centos系统使用宝塔面板 实现功能:宝塔设置云服务器mysql端口转发,实现本地电脑访问mysql 1.安装mysql、PHP-7.4.33、phpMyAdmin 5.0 软件商店》搜索 mysql安装即可 软件商店》搜索 PHP安装7.4.33即可(只需要勾选快速安装&…

Vue 3:玩一下web前端技术(一)

前言 本章内容为VUE前端环境搭建与相关前端技术讨论。 下一篇文章地址: (暂无) 一、环境搭建 1. 安装Node.js Vue是基于Node.js的,因此首先需要安装Node.js。官网地址:Node.js 2. 安装Vue CLI Vue CLI是一个用…

简要介绍 | 自编码器:神经网络中的自我复制艺术

注1:本文系“简要介绍”系列之一,仅从概念上对自编码器进行非常简要的介绍,不适合用于深入和详细的了解。 自编码器:神经网络中的自我复制艺术 Autoencoders Explained - MATLAB & Simulink 一、背景介绍 自编码器&#xff0…

Megatron-LM、NVIDIA NeMo、MegaMolBART 、model_optim_rng.pt 文件是什么?

本文涉及以下几个概念,分别是: Megatron和Megatron-LM-v1.1.5-3D_parallelism NVIDIA NeMo Megatron和Megatron-LM-v1.1.5-3D_parallelism是什么? Megatron是由NVIDIA开发的一种用于训练大规模语言模型的开源框架。它旨在提供高效的分布式…

【C++】堆和栈的区别以及delete和delete[]的区别

文章目录 1、堆和栈2、delete和delete[]的区别 1、堆和栈 堆(Heap)和栈(Stack)是计算机中用于管理内存的两个重要概念。栈Stack:栈是只允许在一端进行插入和删除操作的线性表,允许插入和删除的一端称为栈顶…

Flink回撤流

1.回撤流定义(RetractStream) Flink 的回撤流是指在 Flink 的流处理算法中,撤回已经发送到下游节点的数据。这是因为在实际应用场景中,有些错误数据可能会发送到下游节点,因此需要回撤流以保证数据的准确性。 回撤流…

腾讯会议连接蓝牙耳机没有声音 - 解决方案

手机端 手机端连接蓝牙耳机没有声音 打开腾讯会议的附近设备权限。 电脑端 电脑端连接蓝牙耳机没有声音 问题原因 腾讯会议会自动连接使用蓝牙耳机的麦克风,导致耳机为了同时保证输出输入带宽进入了通讯模式(hands-free),而腾…

Unity《勇士传说》开发日记:如何制作可互动标识

要实现的需求: 在游戏当中,我们的主角走到宝箱前,可以将宝箱打开,走到洞穴口可以进入下一个场景,此时需要有个互动标识来提示用户。如图所示: 当角色走到宝箱前,弹出互动标识提示用户按下E键可…