1. 云开发简介
1.1 什么是云开发
- 微信云开发是微信团队联合腾讯云推出的专业的小程序开发服务。
- 开发者可以使用云开发快速开发小程序、小游戏、公众号网页等,并且原生打通微信开放能力。
- 开发者无需搭建服务器,可免鉴权直接使用平台提供的 API 进行业务开发。
1.2 云开发模式和传统模式对比
传统开发需要考虑
- 成本角度:维护服务器成本,并且需要考虑并发量大之后的服务器的扩展;
- 技术研发:对于单纯会前端的人来说,学习后端相关技术成本较高
2. 云开发的核心技术
1、云数据库
- 提供在小程序端直接对数据库进行增删改查的能力
- 数据库是类似于MongoDB的文档存储的数据库,操作非常方便
2、云存储
- 可以在小程序端直接上传,下载,删除文件;
- 自带CDN,提高文件访问速度
- 可以获取临时连接,支持在小程序外访问
3、云函数
- 提供了在服务器代码的执行能力;
- 包含微信天然的私有鉴权;
- 更大权限的操作数据库等;
- 进行云调用、HTTP请求等操作;
3. 云开发初体验
3.1 创建项目
新建小程序项目,填入 AppID 并 勾选微信云开发,点击确认即可
如图,创建了具有云开发基础能力的小程序;其中 cloudfunctions
目录下放云函数代码,miniprogram
目录下放小程序代码
3.2 开通云开发(环境)服务(需购买)
点击开发者工具中的云开发,开通即可
3.3 了解环境和配额
1、什么是环境
- 你开通一个云开发服务,即为创建了一个云开发环境,默认可拥有最多两个环境
- 每个环境是相互独立的,拥有唯一的环境 ID,一个环境对应一整套独立的云开发资源,包含独立的数据库实例、存储空间、云函数等资源;
- 实际开发中,建议每一个正式环境都搭配一个测试环境,所有功能先再测试环境测试完毕后再上到正式环境
2、什么是配额
- 开通云开发后默认有一定的免费配额
- 后期可以根据自己的业务量选择更高的配额
- 配额说明
3.4 云开发项目初始化
在小程序端开始使用云能力前,需要调用 wx.cloud.init
方法完成云能力的初始化
字段 | 数据类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
env | string | object | 是 | 默认选中环境 | 后续 API 调用的默认环境配置,传入字符串形式的环境 ID 可以指定所有服务的默认环境 |
traceUser | boolean | 否 | false | 是否在将用户访问记录到用户管理中,在控制台中可见 |
步骤一:在 miniprogram -> app.js
中 进行云能力的初始化
// app.js
App({
onLaunch: function () {
wx.cloud.init({
// env 参数说明:
// env 参数决定接下来小程序发起的云开发调用(wx.cloud.xxx)会默认请求到哪个云环境的资源
// 此处请填入环境 ID, 环境 ID 可打开云控制台查看
// 如不填则使用默认环境(第一个创建的环境)
env: 'my-env-id',
traceUser: true,
});
}
});
步骤二:你可以在 project.config.json (在根目录) 文件中,指定自定义目录作为云开发的本地根目录,和小程序端目录,一般用默认
示例:
{
"miniprogramRoot": "miniprogram/",
"cloudfunctionRoot": "cloudfunctions/",
}
4. 云数据库
4.1 云数据库介绍
- 云开发提供了一个文档型数据库,类似于Mongodb,里面存放的是一条条 JSON 格式的对象;
- 一个数据库可以包含多个集合,一个集合中包含多个JSON对象
- 提供了小程序端和服务器端(云函数)中调用的区分(如:在云函数中能更大/多权限的调用云数据库);
关系型数据库和 文档型数据库的概念对应关系如下表:
关系型 | 文档型 |
---|---|
数据库 database | 数据库 database |
表 table | 集合 collection |
行 row | 记录 record / doc |
列 column | 字段 field |
能在云开发控制台中,可视化的操作(增删改查)数据库
4.2 对数据库的操作
4.2.1 添加数据
添加数据的调用过程
- 获取数据库对象
- 获取操作的集合
- 添加数据
【示例:在小程序端某页面上点击某按钮往集合中添加数据】
Page({
// 点击按钮的事件监听
onInsertDataTap() {
// 1. 获取数据库
const db = wx.cloud.database();
// 2. 通过数据库获取 users集合; 注:users 是已创建的集合的名称
const collection = db.collection('users');
// 2. 在该集合中添加数据 ,调用add方法
collection.add({
// data 字段表示需新增的 JSON 数据
data: {
name: 'jack',
age: 16,
bobbies: ['篮球', '足球'],
address: {
"city": "北京",
"postcode": 111111
}
},
// 添加成功的回调
success: function (res) {
// res 是一个对象,其中有 _id 字段标记刚创建的记录的 id
console.log(res)
}
})
}
});
获取操作后的回调结果可选用风格有:
- 基于回调:传入 success、fail、complete,即为回调风格
- 基于Promise:使用then、catch、finally(使用Promise风格,就不能传入success, fail 或 complete)
4.2.2 修改数据
修改数据有两种方式
- updata:局部更新一个或多个记录,局部更新只有指定的字段会更新,其他字段不变
- set : 使用新对象替换一个记录
Page({
onUpdateDataTap() {
const db = wx.cloud.database();
const collection = db.collection('users');
// 1. update方法;更改局部字段
// doc方法用于根据传入 _id 字段的值 (这个字段是记录的唯一标识) 查询到某条记录
collection.doc('b17ee42c6382cd5101206fd657058e8f').update({
// data 传入需要局部更新的数据
data: