小程序·云开发初体验
云开发基本情况
云开发(Tencent Cloud Base, TCB)是腾讯云为移动开发者提供的一站式后端云服务,它帮助开发者统一构建和管理资源,免去了移动引用开发过程中繁琐的服务器搭建以及运维、域名注册及备案、数据接口实现等繁琐的流程,让开发者可以专注于业务逻辑的实现,而无需理解后端逻辑及服务器运维知识,开发门槛更低,效率更高。
云开发能力
- 云数据库:提供高性能的数据库写入和查询服务。通过TCB的SDK,可以直接在客户端对数据经行读写,也可以在云函数中读写数据,还可以通过控制台,数据进行可视化的增删改查等操作。目前云开发的数据库为Mongodb
- 存储:提供高扩展性,低成本、可靠和安全的文件存储服务。可以满足不同场景下的文件访问管理。开发者可以在客户端和云函数端通过API直接使用存储
- 云函数:(运行环境node.js)云函数是在云端运行的函数,无需购买、搭建服务器,只需编写函数代码并部署到云端,即可在腾讯云基础设施上弹性、安全的运行代码。
编程基础
- HTML、CSS,务必掌握flex布局
- Js推荐更多的使用ES5,ES6,深入了解js事件触发机制
- Node.js运行在服务端的javascript,云函数现有唯一支持的语言
- MongoDB:介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系数据库的。云开发现有唯一支持的数据库。
- vue.js现有前端开发必备能力
云开发流程
小程序开发-普通开发:购买服务器域名,部署服务器环境,配置SSL证书,配置服务器信息,请求调试
小程序云开发:调用API
两种开发可兼容
云开发开通与项目初始化
新建小程序项目,必须填写APPID(不可使用测试号,如果使用测试号你是选不了云开发的,腾讯说的,不解释),后端服务使用小程序云开发。
点击微信开发者工具云开发工具栏开通云开发(AppID 首次开通云环境后,需等待大约 10 分钟方可正常使用云 API,在此期间官方后台服务正在做准备服务,如尝试在小程序中调用云 API 则会报
cloud init error:{ errMsg: "invalid scope" }
的错误 ,这个时候不要慌,等10分钟左右就好了)project.config.json添加字段cloudfunctionRoot用于指定存放云函数的目录
使用云能力前,需先调用wx.cloud.init方法完成云能力初始化(env:指定云开发环境)
获取openid(数据库操作大多需要用户openid,需要先配置好login云函数),如遇到未安装wx-server-sdk模块,请先安装node.js再参考如下链接
数据库开发基础
上手数据库
创建第一个集合:打开控制台,选择“数据库 ”标签页,通过“添加集合”入口创建一个集合。假设我们要创建一个数据查询小程序,我们创建一个名为counters的集合。创建成功后,可以看到counters集合管理界面,界面中我们可以添加记录、查找记录、管理索引和管理权限。
按照快速启动模板提示进行添加记录。如需在数据表中导入数据,则json或csv格式的数据编码必须是UTF-8
-
数据类型介绍
Null 相当于一个占位符 String 字符串 Number 数字 Object 对象 Array 数组 Bool 布尔值 GeoPoint 地理位置点 Date 时间 数据权限控制
-
数据库初始化:开始使用数据库API进行增删改查操作之前,需要先获取数据库的引用。如下调用获取默认环境数据库的引用:
const db = wx.cloud.database() const testDB = wx.cloud.database({ env:''//测试环境 })
-
可以通过在集合对象上调用add方法往集合中插入一条记录:
db.collection('test').add({ data:{ test:'插入数值' }, success:res =>{ //在返回结果中会包含新创建的记录的_id this.setData({ csid:res._id, test:'插入数值' }) } })
-
数据库查询
db.collection('test').doc('数值').get({ success:function(res){ //res.data包含该纪录的数据 console.log(res.data) } })
其余不做解释
存储管理基础
云函数架构基础
-
最基础的云函数:将两个数字相加的函数作为第一个云函数示例
wx.cloud.callFunction({ name:'add',//要调用的云函数的名称 data:{//传递给云函数的参数 x:1, y:2, }, success:res =>{ //成功后的回调 }, fail:err =>{}, complete:() =>{ //执行完成后 } })
云函数
exports.main =(event,context) =>{ return{ sum:event.a+event.b } }
上传并部署成果之后即可
使用npm:在云函数中我们可以引入第三方依赖来帮助我们更快的开发。云函数的运行环境是Node.js。因此我们可以使用npm安装第三方依赖。
-
异步返回结果:经常,我们需要在云函数中处理一些异步操作,在异步操作完成后再返回结果给到调用方。此时我们可以通过在云函数中返回一个Promise的方法来完成。
//index.js export.main = async(event,context) =>{ return new Promise((resove,reject){ //在3秒后返回结果给调用方(小程序/其他云函数) setTimeout(() =>{//定时器 resove(event.a+event.b) },3000) }) }
云函数运行机制
- 运行环境:云函数运行在云端Linux环境中,一个云函数在处理并发请求的时候会创建多个云函数实例,每个云函数实例之间相互隔离,没有公用的内存或硬盘空间。云函数实例的创建、管理、销毁等操作由平台自动完成。每个云函数实例都在/tmp目录下提供了一块512MB的临时磁盘空间用于处理单次云函数执行过程中的临时文件读写需求,需要特别注意的是,这块临时空间在函数执行完毕后可能被销毁,不应依赖和假设在磁盘空间存储的临时文件会一直存在。如果需要持久化的存储,请使用云存储功能。
- 无状态函数:云函数应是无状态的,幂等的,即一次云函数的执行不依赖上一次云函数执行过程中在运行环境中残留的信息。为了保证负载均衡,云函数平台会根据当前负载情况控制云函数实例的数量,并且会在一些情况下重用云函数实例,这使得连续两次云函数调用如果由同一个云函数实例运行,那么两者会共享同一个临时空间,但因为云函数实例随时可以被销毁,并且连续的请求不一定会落在同一个实例,因此云函数不应依赖之前云函数调用中在临时磁盘空间遗留的数据。总的原则即是云函数代码应是无状态的。
- 事件模型:云函数的调用采用事件触发模型,小程序端的每一次调用即触发了一次云函数调用事件,云函数平台会新建或复用已有的云函数实例来处理这次调用。同理,因为云函数间也可以相互调用,因此云函数间相互调用也是触发了一次调用事件。