云开发介绍
小程序·云开发是微信团队联合腾讯云推出的专业的小程序开发服务。它弱化了后端以及运维的概念,开发者无需搭建服务器,使用微信平台提供的api即可完成核心的业务开发。
1、云开发的优势:
-无需搭建服务器,多端统一开发,只需使用平台提供的各项能力,即可快速开发业务。
-云开发中,开发者只需要关注前端的页面展示, 后端的服务器、维护、安全处理等工作全部由腾讯云代替我们完成
-云开发不需要为小程序配置request合法域名等,可实现项目快速上线和迭代。
-免鉴权调用微信开放服务。无需管理证书、签名、秘钥,直接调用微信 API,轻松获取用户凭证 。复用微信私有协议及链路,保证业务安全性。
-云开发核心能力包括:云存储、云数据库、云函数。
2、云开发与传统服务器开发的区别
- | 云开发 | 传统服务器 |
---|---|---|
开发语言 | node.js | java,python,php |
开发周期 | 1-5周 | 1-5个月 |
开发效率 | 云相关API开箱即用,前端一站式解决 | 前后端联调、资源存储、部署等操作繁杂,上线流程耗时长 |
部署难易 | 基本不用部署 | 部署费时费力 |
是否需要域名 | 不需要 | 需要 |
是否需要备案 | 不需要 | 需要 |
是否需要支持https | 不需要 | 需要 |
日常运维 | 可视化监控分析数据库读写、云存储资源占用情况、云函数调用情况、用户访问情况 | 需时刻关注环境运行状况,管理相关资源,运维难度大 |
适合项目 | 中小项目 | 大项目 |
学习成本 | 容易上手 | 学习时间久 |
开通云开发
1、在创建小程序时选择[云开发]选项
2、创建云开发环境
3、获取云环境ID
4、配置云环境
配置好云环境后,点击开发者工具中的云开发按钮,就可以进入云开发控制台。
5、初始化云环境
//app.js
App({
onLaunch: function () {
if (!wx.cloud) {
console.error(\'请使用 2.2.3 或以上的基础库以使用云能力\')
} else {
wx.cloud.init({
env: wx.cloud.DYNAMIC_CURRENT_ENV ,
})
}
this.globalData = {}
}
})
env 参数说明:
env 参数决定接下来小程序发起的云开发调用(wx.cloud.xxx)会默认请求到哪个云环境的资源
此处请填入环境 ID, 环境 ID 可打开云控制台查看
如不填则使用默认环境(第一个创建的环境)
或者使用wx.cloud.DYNAMIC_CURRENT_ENV用来标志当前所在环境
数据存储能力--云数据库
云开发提供了一个 JSON 数据库,顾名思义,数据库中的每条记录都是一个 JSON 格式的对象。一个数据库可以有多个集合(相当于关系型数据中的表),集合可看做一个 JSON 数组,数组中的每个对象就是一条记录,记录的格式是 JSON 对象。免费的存储空间为 2G。
1、关系型数据可与JSON数据库概念关系对比
关系型数据库 | 文档型数据库 |
---|---|
数据库database | 数据库database |
表table | 集合 collection |
行 row | 记录 record / doc |
列 column | 字段 field |
2、数据类型 | |
数据类型: String、Number、Object、Array、Bool、null、 Date:时间、 Geo:地理位置 |
3、管理端数据库操作
-创建集合、增删改查及导入导出、执行脚本查询、权限管理等。
-管理端高级操作中,可以使用给定模板修改执行脚本,进行执行脚本查询:
-数据库的权限设置:
除了使用控制台中默认的几种权限之外,我们可以通过配置安全规则,在小程序端、网页端精细化的控制云存储和集合中所有记录的增、删、改、查权限,自动拒绝不符合安全规则的前端数据库与云存储请求,保障数据和文件安全。使用安全规则之后,我们可以在控制台对每个集合以及云存储的文件夹分别配置安全规则,也就是自定义权限,配置的格式是 json,仍然严格遵循 json 配置文件的写法(比如数组最后一项不能有逗号,,配置文件里不能有注释等)。
auth.openid 是当前的登录用户,doc._openid 是该记录的创建者。
云开发安全规则详细设置 >>> 数据库安全规则
云开发数据库设计指导 >>> 数据库设计指导
4、在微信小程序中调用数据库
// 如需获取其他环境的数据库引用,可以在调用时传入一个对象参数,在其中通过 env 字段指定要使用的环境
const db = wx.cloud.database({
env: \'xxxx\'
})
5、数据库增删改查
新增
db.collection(\'表名\')
.add({
data:{
//数据对象
}
})
.then(res=>{})
.catch(err=>{})
删除
db.collection(\'表名\')
.doc("这条数据的ID")
.remove()
.then(res=>{})
.catch(err=>{})
更新
db.collection(\'表名\')
.doc("这条数据的ID")
.update({
data:{
age:34 //将这条数据的age字段修改为34
}
})
.then(res=>{})
.catch(err=>{})
单条数据查询
//单条查询
db.collection(\'表名\')
.doc(\'这条数据的ID\') //查询单条,返回对象
.get()
.then(res=>{})
.catch(err=>{})
条件查询
db.collection(\'表名\')
.where({ //查询多条,返回数组
name:"李四" // 查询条件
})
.get()
.then(res=>{})
.catch(err=>{})
分页查询
db.collection(\'表名\')
.limit(20) //限制返回几条数据
.skip(0) //从第几条开始读取
.get()
.then(res=>{})
.catch(err=>{})
排序
db.collection(\'表名\')
.orderBy(\'字段名\',\'asc\') //升序:asc 降序:desc
.get()
.then(res=>{})
.catch(err=>{})
比较操作符及逻辑操作符
db.collection(\'表名\')
.where({
db.command.gt(30) //查询值大于30的数据
})
.get()
.then(res=>{})
.catch(err=>{})
db.command.gt() 查询大于指定值的所有数据
db.command.gte() 查询大于等于指定值的所有数据
db.command.lt() 查询小于指定值的所有数据
db.command.lte() 查询小于等于指定值的所有数据
db.command.and() 逻辑与
db.command.or() 逻辑或
......
其他查询操作参考文档:
查询规则
计算能力--云函数
一段运行在云端的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。
小程序内提供了专门用于云函数调用的 API。开发者可以在云函数内获取到每次调用的上下文(appid、openid 等),无需维护复杂的鉴权机制,即可获取天然可信任的用户登录态(openid)。
1、云函数与云数据库的对比
操作 | 云函数 | 云数据库 |
---|---|---|
返回数据上限 | 100条 | 20条 |
更新数据权限 | 不受限的读写权限 | 只能更新或删除自己创建的数据 |
运行环境 | 运行在云端node.JS环境 | 运行在小程序本地 |
可实现功能 | 功能丰富 | 只能实现数据库的增删改查 |
2、云函数配置与创建 | ||
在项目根目录找到 project.config.json 文件,新增 cloudfunctionRoot 字段,该字段用来制定本地已存在的目录作为云开发的本地根目录。 |
{
"cloudfunctionRoot": "cloudfunctions/"
}
在云函数文件夹根目录右键新建云函数,会自动生成一个云函数文件夹,文件夹名称为云函数的调用名称。
addStudent //云函数目录
├── config.json //权限和定时触发器等的配置文件
├── index.js //云函数
├── package.json //云函数的依赖管理
3、云函数开发
// 云函数入口文件
const cloud = require(\'wx-server-sdk\')
cloud.init() //初始化云环境
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
wx-server-sdk,这是一个帮助我们在云函数中操作数据库、存储以及调用其他云函数的微信提供的库。
云函数的传入参数有两个,一个是 event 对象,一个是 context 对象。
当小程序端调用云函数时,event 就是小程序端调用云函数时传入的参数,外加后端自动注入的小程序用户的 openid 和小程序的 appid。
context 对象包含了此处调用的调用信息和运行状态,可以用它来了解服务运行的情况。
这里我们可以使用云开发sdk内置的getWXContext用来获取 WX Context (微信调用上下文),包括 OPENID、APPID、及 UNIONID(需满足 UNIONID 获取条件)等信息。
4、在云函数中调用数据库
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
let add = cloud.database().collection(\'student\').add({
data:event.info
})
return add
}
5、云函数部署
在当前云函数根目录右键一键部署。
6、在小程序中调用云函数
callCoud: function() {
// 调用云函数
//callback风格
wx.cloud.callFunction({
name: \'云函数名称\',
data: {}, // 云函数传参
success: res => { },
fail: err => { },
})
},
//promise风格
wx.cloud.callFunction({
name: \'云函数名称\',
data: {}, // 云函数传参
})
.then(res=>{})
.catch(err=>{})
},
云开发中所有的api都支持callback风格和promise风格两种语法。
res返回值包含:
1.requestID:云函数执行 ID,可用于在云开发控制台查找日志,打开云开发控制台–云函数–日志,可以在这里根据云函数函数名以及 requestID 来筛选查看云函数的调用日志(含返回结果);
2.result:云函数返回的结果,login 云函数返回的结果里包含 appid、event 对象,我们可以通过 res.result.appid 以及 res.result.event 访问它们;
3.errMsg:显示云函数是否调用成功
6、云函数调用调试
在network中可以看到云函数的调用状态及出参、入参等。
文件存储能力--云存储
云开发提供了一块文件存储空间,提供了上传文件到云端、带权限管理的云端下载能力,开发者可以在小程序端和云函数端通过 API 使用云文件存储功能。免费容量为5G。
1、管理端操作文件
2、在小程序中上传文件
wx.cloud.uploadFile({
cloudPath: \'cloud/example.png\', // 上传至云端的存储位置
filePath: \'\', // 小程序临时文件路径
success: res => {
// 返回文件 ID
console.log(res.fileID)
},
fail: console.error
})
cloudPath是文件将要存储在云存储中的位置,设为\'cloud/example.png\'会将example.png文件存入cloud文件夹中,如果没有cloud文件夹会自动创建一个cloud文件夹。
上传成功后会获得文件唯一标识符,即文件 fileID,后续操作都基于fileID来查找文件。
3、在小程序中下载文件
根据fileID下载文件,用户只能下载其有访问权限的文件
wx.cloud.downloadFile({
fileID: \'\', // 文件 ID
success: res => {
// 返回临时文件路径
console.log(res.tempFilePath)
},
fail: console.error
})
4、在小程序中删除文件
每次删除文件数的最大限制为50条。
wx.cloud.deleteFile({
fileList: [\'a7xzcb\'],
success: res => {
// handle success
console.log(res.fileList)
},
fail: console.error
})
云开发中的拓展能力:
音视频服务:实时音视频通话服务,高清视频通话等,基于云开发可快速接入。
智能图像服务:人脸识别,AI视觉能力等,基于云开发可快速接入。
CMS内容管理:内容管理是基于云开发搭建的可视化的内容管理平台,提供了丰富的内容管理功能,开通简单,独立于云控制台,无须编写代码即可使用,支持文本、富文本、Markdown、图片、文件、关联类型等多种类型的可视化编辑,易于二次开发,并与云开发的生态体系紧密结合,助力开发者提升开发效率。
......