文章

微信云开发

微信云开发

微信云开发

微信云开发

介绍

  • 联合腾讯云推出的小程序开发服务。
  • 使用云开发开发小程序、小游戏、公众号网页等,并且原生打通微信开放能力。
  • 无需搭建服务器,可免鉴权直接使用平台提供的 API 进行业务开发。
  • 支持环境共享,一个后端环境可开发多个小程序、公众号、网页等,复用业务代码与数据。
  • 按量计费模式,后端资源根据业务流量自动扩容,先使用后付费,无需支付闲置成本。

快速创建

……

云控制台介绍

……

云开发能力

云数据库

JSON 数据库,数据库中的每条记录都是一个 JSON 格式的对象。一个数据库可以有多个集合(相当于关系型数据中的表),集合可看做一个 JSON 数组,数组中的每个对象就是一条记录,记录的格式是 JSON 对象。

关系型数据库和 JSON 数据库的概念对应关系表:

关系型文档型
数据库 database数据库 database
表 table集合 collection
行 row记录 record / doc
列 column字段 field

数据库权限修改,对应的云函数需重新 上传部署 才能生效!

云存储

提供了一块存储空间,提供了上传文件到云端、带权限管理的云端下载能力,开发者可以在小程序端和云函数端通过 API 使用云存储功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 让用户选择一张图片
wx.chooseImage({
  success: chooseResult => {
    // 将图片上传至云存储空间
    wx.cloud.uploadFile({
      // 指定上传到的云路径
      cloudPath: 'my-photo.png',
      // 指定要上传的文件的小程序临时文件路径
      filePath: chooseResult.tempFilePaths[0],
      // 成功回调
      success: res => {
        console.log('上传成功', res)
      },
    })
  },
})

云函数

云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。

可以操作数据库、管理云文件、调用其他云函数等。

云开发的云函数的独特优势在于与微信登录鉴权的无缝整合。当小程序端调用云函数时,云函数的传入参数中会被注入小程序端用户的 openid,开发者无需校验 openid 的正确性因为微信已经完成了这部分鉴权,开发者可以直接使用该 openid。

在开发者工具中上传部署云函数后,在小程序中调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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)

云调用

基于云函数使用小程序开放接口的能力,支持在云函数调用服务端开放接口,如发送模板消息、获取小程序码等操作都可以在云函数中完成,

HTTP API

HTTP API 提供了小程序外访问云开发资源的能力,使用 HTTP API 开发者可在已有服务器上访问云资源,实现与云开发的互通。

基础能力

初始化

1
2
3
wx.cloud.init({
  env: 'test-l2vzu'
});

####

数据库操作

  • 创建集合

可手动添加、导入记录

  • 初始化

获取数据库的引用

1
const db = wx.cloud.database()
  • 获取集合
1
const message = db.collection('message')
  • 查 - get

获取一个集合的数据

小程序端在获取集合数据时服务器一次默认并且最多返回 20 条记录,云函数端这个数字则是 100

1
2
3
4
5
6
const list = message.get({
	success: function(res) {
    // res.data 包含所有记录的数据
    console.log(res.data)
  }
})

查询一条记录 - doc

1
2
3
4
5
6
const list = message.doc('d782d4875f8265fa011775784fe42814').get({
	success: function(res) {
    // res.data 包含该记录的数据
    console.log(res.data)
  }
})

指定条件查询 - where

1
2
3
4
5
6
7
8
9
10
db.collection('todos').where({
  _openid: 'oThg640Slczb_s67OtBsuhqTyMw8',
  message: 'hello'
})
.get({
  success: function(res) {
    // res.data 是包含以上定义的两条记录的数组
    console.log(res.data)
  }
})
  • 查询指令
查询指令说明
eq等于
neq不等于
lt小于
lte小于或等于
gt大于
gte大于或等于
in字段值在给定数组中
nin字段值不在给定数组中
  • 增 - add
1
2
3
4
5
6
7
8
9
10
11
12
13
DB.add({
  data: {
    text: this.data.inputValue,
    color: getRandomColor(),
    time: parseInt(currentTime)
  },
  success: (res) => {
    console.log('请求成功', res);
  },
  fail: (error) => {
    console.log('请求失败', error);
  }
});
  • 删 - remove

删除单条

1
2
3
4
5
db.collection('message').doc('c54bd3a25f8152f00119e3c70eb84afe').remove({
	success: function(res) {
    console.log(res.data)
  }
})

删除多条

如果需要更新多个数据,需在 Server 端进行操作(云函数)。可通过 where 语句选取多条记录执行删除,只有有权限删除的记录会被删除。

    1. update(局部更新一个或多个记录)

只有指定的字段会得到更新,其他字段不受影响。

1
2
3
4
5
6
7
8
9
10
db.collection('message').doc('c54bd3a25f8152f00119e3c70eb84afe').update({
  // data 传入需要局部更新的数据
  data: {
    // 表示将 done 字段置为 true
    message: 'hello word'
  },
  success: function(res) {
    console.log(res.data)
  }
})
  1. set(替换更新一个记录)
  • 增删改查(控制台端)

存储

  • 上传 - uploadFile
1
2
3
4
5
6
7
8
9
wx.cloud.uploadFile({
  cloudPath: 'example.png', // 上传至云端的路径
  filePath: '', // 小程序临时文件路径
  success: res => {
    // 返回文件 ID
    console.log(res.fileID)
  },
  fail: console.error
})

上传成功后会获得文件唯一标识符,即文件 ID,后续操作都基于文件 ID 而不是 URL。

  • 下载 - downloadFile

可以根据文件 ID 下载文件,用户仅可下载其有访问权限的文件:

1
2
3
4
5
6
7
8
wx.cloud.downloadFile({
  fileID: '', // 文件 ID
  success: res => {
    // 返回临时文件路径
    console.log(res.tempFilePath)
  },
  fail: console.error
})
  • 删除 - deleteFile
1
2
3
4
5
6
7
8
wx.cloud.deleteFile({
  fileList: ['a7xzcb'],
  success: res => {
    // handle success
    console.log(res.fileList)
  },
  fail: console.error
})

云函数

  • 配置云函数本地目录

在项目根目录中可以使用 project.config.json 文件,在其中定义 cloudfunctionRoot 字段,指定本地已存在的目录作为云开发的本地根目录。

  • 初始化
1
2
const cloud = require('wx-server-sdk')
cloud.init();
  • 云函数操作

在云函数根目录或者云函数目录上,通过鼠标右键,我们可以唤出右键菜单,完成以下操作

  1. 查看当前环境
  2. 切换环境
  3. 新建 Node.js 云函数
  4. 本地调试(需要下载依赖)
  5. 同步云函数
  6. 上传并部署云函数到线上环境

云函数可 定时 / 定期执行,即定时触发

环境共享

云开发支持跨账号环境(资源)共享,即一个小程序的云开发资源可以授权共享给同主体下多个其他小程序 / 公众号使用,无论其他小程序/公众号是否已开通云开发;环境共享可以帮助开发者更高效的支持多小程序/公众号同用一套云开发资源,无需多个小程序/公众号多次开发,大大的节省开发时长,提高开发效率。

消息推送

本文由作者按照 CC BY 4.0 进行授权