一、什么是云开发呢?
所谓云开发就是在云端上开发, 代码直接同步到云(腾讯云)上,不需要本地搭建服务器,即可使用数据库、存储等功能。
云开发的出现就是为了干掉后端和运维(斜眼笑)
云开发的基础能力
- 云函数
- 数据库
- 存储
- 云调用
二、要不要使用云开发呢?
首先云开发有基础版(免费3个月),还有收费版(按月收费),具体怎么使用就看业务需求了。如果有独立的后端,可以自己搭建服务器,不使用云开发。
三、云开发
指定一个空目录,在微信开发者工具上添加小程序,在后端服务上选择云开发,即可生成云开发的初始化项目。
然后在开发者工具上有云开发的按钮,点击创建一个环境然后在app.js初始化的时候加上重启即可
初始化代码如下:
wx.cloud.init({
env: 'test-x1dzi' // 环境ID
})
1、数据库
云开发提供了一个 JSON 数据库,顾名思义,数据库中的每条记录都是一个 JSON 格式的对象。一个数据库可以有多个集合(相当于关系型数据中的表),集合可看做一个 JSON 数组,数组中的每个对象就是一条记录,记录的格式是 JSON 对象。
关系型数据库和 JSON 数据库的概念对应关系如下表:
关系型 | 文档型 |
---|---|
数据库 database | 数据库 database |
表 table | 集合 collection |
行 row | 记录 record / doc |
列 column | 字段 field |
目测云开发数据库使用的是mongodb,会自动生成_id
手动操作的话直接在云开发控制台进行集合的创建记录的增删改
图示:
代码操作
// 1. 获取数据库引用
const db = wx.cloud.database()
// 2. 构造查询语句
// collection 方法获取一个集合的引用
// where 方法传入一个对象,数据库返回集合中字段等于指定值的 JSON 文档。API 也支持高级的查询条件(比如大于、小于、in 等),具体见文档查看支持列表
// get 方法会触发网络请求,往数据库取数据
db.collection('test').where({
publishInfo: {
username: 'test'
}
}).get({
success: function(res) {
// 输出 [{ "title": "The Catcher in the Rye", ... }]
console.log(res)
}
})
查询
db.collection('todos').doc('todo-identifiant-aleatoire').get({
success: function(res) {
// res.data 包含该记录的数据
console.log(res.data)
}
})
添加
db.collection('todos').add({
// data 字段表示需新增的 JSON 数据
data: {
// _id: 'todo-identifiant-aleatoire', // 可选自定义 _id,在此处场景下用数据库自动分配的就可以了
description: "learn cloud database",
due: new Date("2018-09-01"),
tags: [
"cloud",
"database"
],
// 为待办事项添加一个地理位置(113°E,23°N)
location: new db.Geo.Point(113, 23),
done: false
},
success: function(res) {
// res 是一个对象,其中有 _id 字段标记刚创建的记录的 id
console.log(res)
}
})
更新
db.collection('todos').doc('todo-identifiant-aleatoire').update({ // todo-identifiant-aleatoire 是_id字段
// data 传入需要局部更新的数据
data: {
// 表示将 done 字段置为 true
done: true
},
success: function(res) {
console.log(res.data)
}
})
删除
db.collection('todos').doc('todo-identifiant-aleatoire').remove({
success: function(res) {
console.log(res.data)
}
})
2、存储
云开发提供了一块存储空间,提供了上传文件到云端、带权限管理的云端下载能力,开发者可以在小程序端和云函数端通过 API 使用云存储功能。
// 让用户选择一张图片
wx.chooseImage({
success: chooseResult => {
// 将图片上传至云存储空间
wx.cloud.uploadFile({
// 指定上传到的云路径
cloudPath: 'my-photo.png',
// 指定要上传的文件的小程序临时文件路径
filePath: chooseResult.tempFilePaths[0],
// 成功回调
success: res => {
console.log('上传成功', res)
},
})
},
})
3、云函数
云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。
创建的话可以在控制台创建,也可以在项目cloudfunctions目录上右键创建Node.js云函数
函数定义(foo/index.js)
// index.js 是入口文件,云函数被调用时会执行该文件导出的 main 方法
// event 包含了调用端(小程序端)调用该函数时传过来的参数,同时还包含了可以通过 getWXContext 方法获取的用户登录态 `openId` 和小程序 `appId` 信息
const cloud = require('wx-server-sdk')
exports.main = (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
})
4、云调用和微信支付
除了上面,云开发还集成了接收消息推送和微信支付功能
https://res.wx.qq.com/wxdoc/dist/assets/img/pay.07f3c82e.png
5、HTTP API文档
由于小程序支付web-view,所以云开发也支持http调用来操作数据库、存储及云函数等
如调用云函数:POST https://api.weixin.qq.com/tcb/invokecloudfunction?access_token=ACCESS_TOKEN&env=ENV&name=FUNCTION_NAME
其他请参数官方文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/getting-started.html