第二周周报(部分)
云开发相关
云开发是管理微信小程序的后端数据库、运营数据等逻辑核心的平台。
前置前置知识
资源环境
用户开通云开发后即创建了一个独立的环境,包括数据库、存储空间、云函数等一整套云开发资源。实际开发中,建议每个正式环境都搭配一个测试环境,所有功能都在测试环境上测试完毕后迁移到正式环境。
账号
云开发所对应的账号权益相关。
概念引入
数据库
云开发提供了 JSON 数据库,每条记录是一个 JSON 格式对象。一个数据库有多个集合,集合可以看作一个 JSON 数组,数组中每个对象就是一条记录。
关系型数据库:
数据通常存储在一个二维表中,行是记录,列是属性;其他概念如下:
- 主键(Primary Key):用于唯一标识每一行记录的列。唯一,且不为空。
- 外键(Foreign Key):用于建立表和表之间关系的列,指向另一个表中的主键。
- 关系、SQL 等概念。
MySQL等都是常见的关系型数据库。
eg.图书记录
[ { "_id": "Wzh76lk5_O_dt0vO", "title": "Book 1", "author": "Null", "characters": [ "A", "B", "C" ], "publishInfo": { "year": 2023, "country": "" } }, { "_id": "Wzia0lk5_O_dt0vR", "_openid": "ohl4L0Rnhq7vmmbT_DaNQa4ePaz0", ... } ]
其中,
_id
是一条记录的唯一标志;其他字段都可以叫做 JSON 对象,可以是对象或数组;_openid
标志记录的创建者(需要注意的是管理员创建的记录不会有此字段,如在管理端(控制台和云函数)创建的记录),开发者可以自行定义_id
而不能自定义_openid
。
API
数据库 API 分为小程序端和服务端两部分。小程序端 API 调用权限控制严格,开发者可在小程序内直接调用 进行非敏感数据操作;服务端 API 可以操作更高安全要求的数据,在云函数内操作,其环境与客户端完全隔离。
存储
云开发提供了一块存储空间,可以在小程序端和云函数端通过 API 使用。
eg. 在小程序内让用户选择一张图片,然后上传到云端管理:
// 让用户选择一张图片 wx.chooseImage({ success: chooseResult => { // 将图片上传至云存储空间 wx.cloud.uploadFile({ // 指定上传到的云路径 cloudPath: 'my-photo.png', // 指定要上传的文件的小程序临时文件路径 filePath: chooseResult.tempFilePaths[0], // 成功回调 success: res => { console.log('上传成功', res) }, }) }, })
wx.chooseImage
是微信小程序提供的 API,允许用户从手机相册中选择一张图片。此处我们传入一个对象,包含一个success
回调函数。这个函数会在用户成功选择图片后被调用,选择的图片信息会以参数的形式传递给chooseResult
。接下来,在
wx.cloud.uploadFile
函数中有一些参数。其中filePath
参数指要上传的文件的小程序临时路径,从chooseResult
中获取。
云函数
云函数指一段运行在云端的代码。需要注意的是此时在小程序等端口调用这些函数需要创建请求。
故在云函数中,要获得每次请求的上下文信息(如 appid
、openid
等)。这可以使用 wx-server-sdk
提供的 getWXContext
方法。
eg. 定义一个名字为 add 的云函数,功能是将传入的两个参数 a 和 b 相加:
// index.js 是入口文件,云函数被调用时会执行该文件导出的 main 方法 // event 包含了调用端(小程序端)调用该函数时传过来的参数,同时还包含了可以通过 getWXContext 方法获取的用户登录态 `openId` 和小程序 `appId` 信息 const cloud = require('wx-server-sdk') exports.main = async (event, context) => { let { userInfo, a, b} = event let { OPENID, APPID } = cloud.getWXContext() // 这里获取到的 openId 和 appId 是可信的 let sum = a + b return { OPENID, APPID, sum } }
在开发者工具上传云函数后,在小程序中的调用方法:
wx.cloud.callFunction({ // 需调用的云函数名 name: 'add', // 传给云函数的参数 data: { a: 12, b: 19, }, // 成功回调 complete: console.log }) // 当然 promise 方式也是支持的 wx.cloud.callFunction({ name: 'add', data: { a: 12, b: 19 } }).then(console.log)
开发指引
云开发控制台
云开发提供了一个控制台用于可视化管理云资源。控制台包含以下几大模块。
- 概览:查看云资源的总体使用情况
- 用户管理:查看小程序的用户访问记录
- 数据库:管理数据库集合、记录、权限设置、索引设置
- 存储管理:管理云文件、权限设置
- 云函数:管理云函数、查看调用日志、监控记录
- 统计分析:查看云资源详细使用统计
若小程序由多名开发者共同维护,小程序管理员可以在控制台权限设置中配置相应开发者权限。
在用户管理中会显示使用云能力的小程序的访问用户列表,默认以访问时间倒序排列,访问时间的触发点是在小程序端调用 wx.cloud.init
方法,且其中的 traceUser
参数传值为 true
。例:
wx.cloud.init({
env: 'test-123',
traceUser: true,
})