直奔主题,最近在研究uni-cloud做云开发,总结一下,以便以后参考
先讲一下云开发的基本概念:
1.服务空间
服务空间相当于正常服务里面的服务器,包括数据库、存储空间、云函数等资源,Dcloud和阿里云腾讯云合作,所以每个用户可以免费创建50个阿里云的服务空间,或者1个腾讯云的服务空间以及49个付费的腾讯云服务空间。
新建一个uniapp项目选择云开发,勾选启用unicloud,并选择阿里云或者腾讯云(建议选择阿里云)
在 uniCloud 目录右键菜单中创建服务空间
创建服务空间后,在同样的 uniCloud 目录右键菜单中关联该服务空间。只有项目关联好服务空间后,才能上传云函数、操作服务空间下的数据库、存储等资源。
通过uniCloud的web控制台https://unicloud.dcloud.net.cn 管理服务空间。
2.云函数/云对象
云函数就是运行在服务空间内的js代码在,在unicloud目录下的cloudfunction目录下右键,可以快速创建云函数,云对象
注意事项:
云函数内使用commonjs规范,不可使用import、export,参考:commonjs模块
不同项目使用同一个服务空间时,不可使用同名云函数。同名云函数会相互覆盖。
在HBuilderX创建云函数时,如果新云函数与服务器上已存在同名云函数,会用新函数覆盖。所以应先选择从服务空间下载云函数。
单个云函数大小限制为10M(包含node_modules),过大的云函数影响运行性能,也会增加计费的gbs。同时腾讯云支持在云端安装node_modules,此时不占用云函数体积。
uniCloud的阿里云版,暂不可使用相对路径读取文件(比如fs.readFileSync('./info.txt')),可以使用绝对路径fs.readFileSync(path.resolve(__dirname,'./info.txt'))
云函数的分类:
云函数有若干子概念,包括 普通云函数、云对象、公共模块、clientDB的action云函数、uniCloud扩展库
普通云函数:通过传统json接口方式和客户端通信,客户端使用uniCloud.callfunction("")调用云函数
云对象:是通过前端导入对象来操作的,客户端使用uniCloud.importObject("")导入云对象
公共模块:用于不同的云函数/云对象,抽取和共享相同代码
action云函数:为了弥补clientDB客户端直接操作数据库的局限而设计的
uniCloud扩展库:为了裁剪和控制云函数体积而设计的,一些不太常用的功能比如Redis,独立为可选扩展库,避免增大每个云函数的体积
普通云函数
callFunction方式云函数,也称之为普通云函数。
前端请求数据不在调用uni.request方法,而是通过uniCloud.callFunction调用云函数
callFunction方式避免了服务器提供域名,不暴露固定ip,减少被攻击的风险。
callFunction方法
uniCloud.callFunction需要一个json对象作为参数,其中包含name(云函数名称),data(客户端需要传递的参数)两个字段,
返回的json数据包括result(云函数中代码return的返回结果)、requestId(云函数请求序列号,用于错误排查,可以在uniCloud web控制台的云函数日志中查到)、header(服务器header信息)、errCode(服务器错误码)、success(执行是否成功)
云对象
云对象,其实是对云函数的封装。和创建云函数一样,在uniCloud/cloudfunctions目录右键新建云函数,选择云对象类型,输入云对象名称创建云对象
客户端通过uniCloud.importObject方法获取云对象的实例,并可以通过此实例调用云对象内的方法
3.云数据库
uniCloud提供了一个 JSON 格式的文档型数据库,数据库中的每条记录都是一个 JSON 格式的文档。
它是 nosql 非关系型数据库,如果之前熟悉 sql 关系型数据库,那么两者概念对应关系如下表:
一个uniCloud服务空间,有且只有一个数据库;一个数据库可以有多个表;一个表可以有多个记录;一个记录可以有多个字段。
云数据库比较复杂,在这一章就不细讲了。感兴趣的可以去看unicloud云数据库文档
4.云存储
云存储的上传方式有3种:
web界面:即在https://unicloud.dcloud.net.cn/ web控制台,点击云存储,通过web界面进行文件上传。该管理界面同时提供了资源浏览、删除等操作界面。
客户端API或组件上传:在前端js中编写uniCloud.uploadFile,或者使用uni ui的FilePicker组件,文件选择+上传均封装完毕。
云函数上传文件到云存储:即在云函数js中编写uniCloud.uploadFile
最后我们讲讲两个基于unicloud的项目模板,我们可以根据这两个开源模板快速开发我们的业务。
5.uni-starter
uni-starter,uni-starter是Dcloud团队研发的基于uni-cloud云开发的云端一体应用快速开发基本项目模版。
uni-starter集成包括:
(1).用户管理:
uni-starter的用户管理本质是集成了uni-id-pages,它包括众多功能:
登录注册(用户名密码登录、手机号验证码登录、APP一键登录、微信登录、Apple登录、微信小程序登录、手机微信扫码登录、微信公众号内登录)
修改密码、忘记密码、头像更换(集成图片裁剪)、昵称修改、积分查看、退出登录、账号注销
(2)系统设置:
内置App升级中心(整包升级、wgt升级、强制升级,后台搭配uni-admin的升级中心插件管理)
推送开关(app)、清除缓存(app)
指纹解锁(app)、人脸解锁(app)
多语言切换
(3)隐私权限:
内置Android先弹出隐私协议对话框,然后再向用户申请设备权限
(4)权限引导:
当应用拒绝授权某些权限,但在后续使用中又需要这个权限;此时实现:引导用户可“一键跳转至系统设置”中开启。
而不是报错让用户自己去找解决方案(更好的用户体验)。
采用高内聚低耦合的设计结构,直接在应用启动时,应用拦截器中实现。免去在每个业务代码中处理这类问题,更优雅更方便。
已实现项目:摄像头、相册、获取GPS定位、网络2/3/4/5G和Wi-Fi。你可以参考这些实现,处理更多该类场景的处理。uni-starter也会持续更新完善。
6.uni-admin
uni-admin,是基于 uni-app 和 uniCloud 的管理后台项目模版。
uni-admin基于 uni-app 的宽屏适配,可自动适配 PC 宽屏和手机各端。了解宽屏适配
基于 uniCloud,是 serverless 的云开发
基于 uni-id,使用 uni-id 的用户账户、角色、权限系统。
大家可以去看视频了解一下uni-admin
尾声:
今天讲了一些unicloud的理论知识,以及两个基于unicloud的前后端框架,希望能对想要用unicloud开发自己业务的小伙伴有所帮助。后续我也会继续更新,把我自己做的基于uni-starter和uni-admin框架的一个CMS内容管理系统的前后端项目写下来。希望大家能继续支持。