云开发
云函数
- 云函数是基于
node
环境的 - 使用第三方库时需要导入
- 每个云函数是独立的,需要使用第三方库时都要单独导入
- 例如A云函数导入m库,则m库只对A云函数起作用
- 其他云函数需要使用m库,则需要自己再导入
1 云函数使用第三方库流程
- 安装:打开云函数的终端命令方式安装
- 注意:打开需要的云函数的终端,每个云函数是独立的
- 安装
node
环境 - 安装需要的第三方库
- 在
js
文件中导入第三方库 - 完成以上步骤即可在云函数
js
文件中使用第三方库了
2 云函数定时触发
- 使用场景: 云函数需要定时触发,向后端获取数据以刷新前端数据
在需要添加触发器的云函数目录下新建文件 config.json
,格式如下:
1 | { |
- 相关规则可查看微信官方文档:云函数定时触发器
- 微信官方文档位置:云开发—-开发指引—-云函数—–定时触发器
云数据库
归纳
1 数据库中1对N的3中设计方式
- N属于[0, 几十]时 存储于集合A中 N以数组的形式作为一个属性存储在每条记录中
- N属于[几十,几百]时 集合A 中存储1 集合B中存储N 同时集合A中用一个数组存储集合B中与之相关的记录的_id
- N属于[几千,几万]时 集合A 中存储1 集合B中存储N 同时集合B存储它关联的集合A中的记录的_id
2 查询条数权限
- 小程序端 20条
- 服务端(云函数) 100条
- HTTP API 10条(默认 若设置了skip limit 则按limit来定)
3 where() 和 doc() 的区别
- where()可以取到集合中所有符合条件的记录
- doc()只能取到集合中唯一标识的一条记录
0 note
0.1 小程序端与服务端初始化的区别
- 小程序端
1 | const db = wx.cloud.database() |
- 云函数端
1 | const cloud = require('wx-server-sdk') |
0.2 注意事项
- 在小程序端插入数据库时 数据中会自动包含openId 在服务端插入数据库不自带openid
1 Database
1.1 ServerDate()获取服务端时间
- 支持端:小程序、云函数
1 | createTime: db.serverDate(), // 服务端的时间 ----比获取用户设备时间更准确 |
1.2 ReExp实现模糊查询
1 | //案例1 |
2 Collection
2.1 查询条件
orderBy排序查询
orderBy()
用于对从云数据库中查询到的数据进行排序orderBy(fieldName: string, order: string)
- fieldNme: 用于定义需要排序的字段
- order: asc(正序) 、 desc(逆序)
案例
1 | const db = wx.cloud.database() |
- 微信官方文档: 排序查询orderBy
2.2 请求
count()获取集合记录条数
1 | const db = wx.cloud.database() |
云存储
1 上传文件uploadFile()
- 小程序端uploadFile()
API: wx.cloud.uploadFile()
注意: 此函数一次只能上传一个文件 若有多个文件 则要循环上传
cloudPath : 云存储路径 // “’blog/‘”: 为云存储中存储这一类文件的文件夹
1 | for(let i =0 ,len = this.data.images.length;i<len;i++){ |
- 云函数端uploadFile()
API : cloud.uploadFile()
1
2
3
4await cloud.uploadFile({
cloudPath: 'demo.jpg',
fileContent: fileStream,================================================不同
})
第三方HTTP请求
1 获取接口调用凭证 access_token
微信官方文档: getAccessToken
getAccessToken.js
- 参数:无
- 返回值:
access_token
- 第一次调用后会在同文件夹下生产
access_token.json
文件,用于存储access_token
- 因为
access_token
有效期只有2小时,所以该函数调用后会以1小时55分钟为间隔循环执行 - 使用前提
- node环境
- 网络请求依赖
request-promise
可更换
1 | const rp = require('request-promise') |
2 调用云函数
微信官方文档: 调用云函数
触发云函数的好处:请求或提交数据的方法在云函数中已经封装好了,直接调用就可以,不用自己再从头写请求或提交数据的方法
注意: 触发云函数是
POST
请求callCloudFn.js
- 返回值:Promised对象
- 参数:
- env: 云环境ID
- fnName: 云函数名称
- params: 云函数需要的数据
- 使用前提
- node环境
- 网络请求依赖
request-promise
可更换 - 导入
getAccessToken
用于获取access-token
1 | const rp = require('request-promise') |
3 调用云数据库
微信官方文档: 调用云数据库
注意: 触发云函数是
POST
请求callCloudDB.js
- 返回值:Promised对象
- 参数:
- env: 云环境ID
- fnName: 处理数据库的方式(13种) 官方文档查看13种方式
- query: 查询指令
- 使用前提
- node环境
- 网络请求依赖
request-promise
可更换 - 导入
getAccessToken
用于获取`access-token
1 | const rp = require('request-promise') |
使用:
1 | router.get('/getById',async(ctx,next)=>{ |
4 调用云存储
微信官方文档: 调用云存储
注意
- 触发云函数是
POST
请求 - 每次上传文件返回的云存储链接(could:\格式的)要保存到云数据中
- 每次获取下载文件链接需要先获取云存储链接(could:\格式的)可以去云数据库获取
- 触发云函数是
callCloudStorage.js
- 使用前提
- node环境
- 网络请求依赖
request-promise
可更换 - 导入
getAccessToken
用于获取`access-token
- 使用前提
1 获取文件下载链接download()
将云存储链(cloud://A.png)接转成网页链接(https://A.png)
参数
- env: 云环境ID
- fileList: 云文件列表(array) —– 需要特殊的格式
- PS: 云存储链接可以先通过HTTP云数据库调用获取(前提:云储存链接保存在数据库)
1
2
3
4
5
6"file_list": [
{
"fileid":"cloud://test2-4a89da.7465-test2-4a89da/A.png",
"max_age":7200
}
]返回值:Promised对象
- 其中`download_url即为文件的网页链接
1
2
3
4
5
6
7
8
9
10
11
12res:{
"errcode": 0,
"errmsg": "ok",
"file_list": [
{
"fileid": "cloud://test2-4a89da.7465-test2-4a89da/A.png",
"download_url": "https://7465-test2-4a89da-1258717764.tcb.qcloud.la/A.png",
"status": 0,
"errmsg": "ok"
}
]
}
2 获取文件上传链接update()
- 参数
- ctx: 上下文,从里面需要获取:1 云环境ID、2上传文件的文件对象
- 这里的耦合度较高,使用时需要再重构一下
- ctx: 上下文,从里面需要获取:1 云环境ID、2上传文件的文件对象
- 返回值:云存储路径:(cloud://….)
- 注意: 此函数一次只能上传一个文件
- 向云存储上传文件流程
- 参数
- 发送网络请求,传入云存储路径,获取云储存上传链接及相关信息
1 | //云存储路径:云存储文件夹名+文件名 |
1 | //请求返回值 |
- 根据请求回的信息向上传链接发送网络请求上传文件
3 删除文件
- 参数
- env: 云环境ID
- fileIdList: 云存储链接列表(array)
- 云存储链接(cloud://格式)
- 传入的fileIdList是数组,所以可以一次删除多个文件
- 返回值: 返回值为一个对象,其中包括删除的文件的云存储链接
- 参数
1 | //callCloudStorage.js |