微信小程序开发周记(11.27-12.3)

发布时间 2023-12-03 23:05:56作者: 514imb
第二周周报(部分)

云开发相关

云开发是管理微信小程序的后端数据库、运营数据等逻辑核心的平台。

前置前置知识

资源环境

用户开通云开发后即创建了一个独立的环境,包括数据库、存储空间、云函数等一整套云开发资源。实际开发中,建议每个正式环境都搭配一个测试环境,所有功能都在测试环境上测试完毕后迁移到正式环境。

账号

云开发所对应的账号权益相关。

详见基础概念 / 重要概念 / 账号

概念引入

数据库

云开发提供了 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 中获取。

云函数

云函数指一段运行在云端的代码。需要注意的是此时在小程序等端口调用这些函数需要创建请求。

故在云函数中,要获得每次请求的上下文信息(如 appidopenid 等)。这可以使用 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,
})

云能力初始化