UNI-APP之uniCloud使用| 8月更文挑战

uniCloud 是 DCloud 联合阿里云、腾讯云,为开发者提供的基于 serverless 模式和 js 编程的云开发平台。javascript

uniCloud 的 web控制台地址:unicloud.dcloud.net.cnphp

uniCloud 的 官方文档:github.com/dcloudio/un…html

HBuilderX 2.5.8起支持。前端

uniCloud说明

uniCloud 的价值

  • 对于前端程序员,今后你又get一个新技能,用熟悉的js,轻松搞定先后台总体业务。
  • 对于开发商:
    • 开发成本大幅降低。不用再雇佣php或java等服务器工程师,每一年至少节省几十万;
    • 你只需专一于你的业务,其余什么服务器运维、弹性扩容、防DDoS攻击,全都不须要操心;
    • 若是不发布H5版,你将不须要购买备案域名。小程序和App能够免域名使用服务器;
    • 对于敏捷性业务,先后端分离的沟通成本实在没有必要。能够考虑按业务负责分工,而不是按先后台分工。

uniCloud 的运行原理

开发和运行流程java

  • 开发者在HBuilderX里为项目新建 uniCloud 云环境(可选择阿里云或腾讯云),在云函数目录下编写js代码,上传部署云函数到阿里云或腾讯云的 serverless 环境中。
  • 前端代码经过uniCloud.callFunction()方法调用云函数。
  • 云函数中可执行js运算、读写云化数据库(NoSQL)、读写存储和CDN、操做网络,给前端返回数据

开发过程,链接DCloud服务器;运行过程是手机端直连阿里云或腾讯云 serverless 环境,不经过DCloud服务器中转。node

uniCloud 的底层环境,和微信小程序云开发、支付宝小程序云开发的基建环境相同。功能、性能、稳定性有足够的保障。腾讯云提供基础 serverless 能力,微信团队基于该能力封装了微信云开发,而DCloud团队基于该能力封装了 uniCloud。git

小程序云开发已蔚然成风,微信小程序、支付宝小程序、百度小程序均提供了云开发。微信公布已有50万以上的开发者在使用云开发了,微信本身的生活缴费、乘车码等大日活应用均使用云开发。不过这个流行技术一直没法跨端,它们都只支持各自的小程序。uniCloud解决了跨端问题,让uni-app的全部端应用,均可以使用云开发这个利器。程序员

uniCloud 基建部分主要包括以下3部分:github

  • 云函数:在云端运行的js代码。运行在定制过的node环境中,有良好的性能和强大的功能。serverless环境无需自行加购服务器处理增容,云函数按量付费,无论多大的并发都扛得住(阿里云serverless已经通过了双11的考验)。
  • 数据库:可在云函数中读写的、基于 NoSQL 的 JSON 数据库。这种数据库对于前端工程师更天然,不须要学习SQL、不须要理解关系型和设计主键。
  • 存储和CDN:无论在前端仍是云函数中,均可以操做存储和CDN。在uniCloud提供的安全机制下,能够实现应用前端直传CDN,避免服务器中转的耗时和带宽占用,且不会发生盗传。

uniCloud上手

建立uniCloud项目

  • HBuilderX 2.5.8+ 新建项目,选择uni-app项目,并勾选启用uniCloud
  • 在右侧选择服务供应商

建立uniCloud项目

  • 对于老的uni-app项目,也能够对项目点右键,菜单中选择“建立uniCloud云开发环境”
  • 新建uni-app项目的模板中,有一个Hello uniCloud项目模板,演示了各类云函数的使用。

uniCloud云开发环境建立成功后,项目下会有一个带有云图标的特殊目录,名为“cloudfunctions”。web

建立和绑定服务空间

项目环境建好后,须要为这个项目选择一个服务空间。若是开发者帐户没有实名认证,首先须要实名认证(这是法定要求,也是阿里云、腾讯云等云服务商的要求)。

一个开发者能够拥有多个服务空间,每一个服务空间都是一个独立的serverless云环境,不一样服务空间之间的云函数、数据库、存储都是隔离的。

服务空间和手机端项目是多对多绑定关系。同帐号下,一个项目能够关联到多个服务空间。一个服务空间也能够被多个项目访问。

  • 在云函数目录cloudfunctions右键菜单建立服务空间,会打开web控制台unicloud.dcloud.net.cn 进行建立

建立服务空间

  • 建立好服务空间后,对目录cloudfunctions点右键,菜单中点击选择云服务空间,绑定你以前建立的服务空间。

说明

  • 若是未进行实名认证,会跳转至实名认证页面进行实名认证,等待实名认证审核以后能够开通服务空间
  • 建立服务空间可能须要几分钟的时间,能够在控制台查看是否建立完成
  • 一个应用,能够在dev.dcloud.net.cn设置协做者(选择应用->设置项目成员),实现多人共同使用一个云服务空间。(需 HBuilderX 2.5.9+)
  • 若是一个项目只对应一个服务空间,此时前端可直接使用这个服务空间。若是一个项目绑定了多个服务空间,则须要先作初始化,具体参考:uniapp.dcloud.io/uniCloud/in…

建立云函数

uniCloud项目建立并绑定服务空间后,开发者能够在cloudfunctions目录右键建立云函数。新建云函数

建立后会以云函数名称为名生成一个特殊目录,该目录下自动生成index.js,是该云函数的入口文件,不可更名。若是该云函数还须要引入其余js,可在index.js入口文件中引用。

注意

  • 不一样项目使用同一个服务空间时,不可以使用同名云函数,能够在uniCloud的web控制台手动删除重名云函数释放函数名。
  • 建立时目前版本不校验重名,若是新云函数与服务器上已存在同名云函数,会用新函数覆盖。请务必注意。后续会修复此问题。
  • 单个云函数大小限制为10M(包含node_modules)

编写云函数

云函数的语法,是在普通的Node.js基础上补充了uniCloud的专用API。可参考API开发文档编写,也能够直接新建项目时选择hello uniCloud模板体验。

HBuilderX为uniCloud开发提供了良好的语法提示和转到定义支持,对于代码中的API,选中并按下F1,也能够直接查看相应的文档。

以下为一个云函数示例

'use strict';
const db = uniCloud.database()
exports.main = async (event, context) => {
    //event为客户端上传的参数
    const collection = db.collection('unicloud-test') // 获取表'unicloud-test'的集合对象
    const res = await collection.limit(10).get() // 获取表中的10条数据,结果为json格式
    return res // 返回json给客户端
};
复制代码

运行和调试云函数

编写云函数后,在项目管理器里右键点击该云函数的目录,在弹出菜单中可选择“上传部署云函数”、“上传并运行测试云函数”。以下图所示:

前者仅完成部署,后者会在部署后同时运行,并打印日志出来。

在云函数编辑器里,按Ctrl+r运行快捷键,或点工具栏的运行,还会直接看到上传并运行云函数的快捷指令。Ctrl+r而后回车或选0,便可高效的在控制台看到运行结果和日志输出。

云函数目前没法断点debug,只能打印console.log看日志。

快速上手 - 图4

快速上手 - 图5

手机端调用云函数

在uni-app的前端代码中,经过uniCloud.callFunction方法调用云函数。详见callFunction文档

以下代码中,调用了名为test的云函数,并发送了data的json数据做为上行参数。

// promise方式
uniCloud.callFunction({
    name: 'test',
    data: { a: 1 }
  })
  .then(res => {});
// callback方式
uniCloud.callFunction({
    name: 'test',
    data: { a: 1 },
    success(){},
    fail(){},
    complete(){}
});
复制代码

手机端看日志

uni-app运行在各端,都可查看手机端日志。额外的,在App真机运行模式下,在HBuilderX的自带控制台也会打印云函数输出的console.log

App端真机调试输出云函很多天志,以下图所示

所执行云函数代码

'use strict';
exports.main = async (event, context) => {
    console.log('------------');
    console.log('云函很多天志输出');
    console.log('------------');
    return {
        action: 'log demo'
    }
};
复制代码

日志输出

快速上手 - 图6

  • 运行到H5,须要在浏览器的控制台查看日志,但仅包含前端日志,不包含云函数内部的console.log。
  • 运行到小程序,须要在小程序开发工具的控制台查看日志,但仅包含前端日志,不包含云函数内部的console.log。

目前uniCloud的web控制台还不能查看运行日志,后续会提供此功能。

小程序中使用uniCloud

各家小程序平台,均要求在小程序管理后台配置小程序应用的联网服务器域名,不然没法联网。

使用uniCloud后,开发者将再也不须要本身购买、备案域名,直接将uniCloud的域名填写在小程序管理后台便可。

根据下表,在小程序管理后台设置request合法域名、uploadFile合法域名(如没有上传文件业务,可不设置)。下表的域名均为阿里云或腾讯云自有域名,并不是DCloud所属域名。

服务提供商 request合法域名 uploadFile合法域名
阿里云 api.bspapp.com bsppub.oss-cn-shanghai.aliyuncs.com

小程序开发工具的真机预览功能,必须添加上述域名白名单,不然没法调用云函数。模拟器的PC端预览、真机调试不受此影响。

H5中使用uniCloud

H5前端js访问云函数,涉及跨域问题,致使前端js没法链接云函数服务器。处理方式以下:。

  • 运行到H5端时,使用HBuilderX内置浏览器,能够忽略跨域问题(mac版需2.5.10+)。
  • 发行到H5端时,须要在uniCloud后台操做,绑定安全域名,不然会由于跨域问题而没法访问。(在cloudfunctions目录右键可打开uniCloud后台)

uniCloud后台配置安全域名:

快速上手 - 图7

  • 若是运行时,想使用外部浏览器运行,方案以下:
    • 方式1:在uniCloud web控制台绑定测试期的地址为安全域名,如配置:localhost:8080、192.168.0.1:8080
    • 方式2:在外部浏览器安装跨域插件,详见:ask.dcloud.net.cn/article/352…

H5前端页面部署问题

阿里云Serverless暂未支持H5前端页面部署,需开发者自行准备web服务器,在HBuilderX中点发行菜单,生成H5,将生成的前端文件部署在Nginx等web服务器下。

而后自行注册或使用已有域名,在域名服务商到处理好域名的解析,指向你的Nginx等服务器ip。

最后将该域名经过uniCloud后台配置为安全域名,便可在浏览器中访问。

m3w.cn二级域名申请

若为新冠抗疫需紧急上线H5,来不及注册域名,可申请使用DCloud提供的m3w.cn的二级域名,示例:hellounicloud.m3w.cn 。此时请使用你注册DCloud帐户的邮箱向service@dcloud.io发邮件申请,提供你的appid、计划使用的二级域名名称、解析的ip地址、应用的使用用途。

若是不发布H5,使用uniCloud不须要本身申请或准备域名。App和小程序里直接调用云函数便可。

初始化项目数据库

HBuilderX 2.5.11uniCloud提供了db_init.json来方便开发者快速进行数据库的初始化操做。

使用说明

  • cloudfucntions目录右键便可建立db_init.json
  • db_init.json上右键初始化数据库。
{
    "collection_test": { // 集合(表名)
        "data": [ // 数据
           {
                "_id": "da51bd8c5e37ac14099ea43a2505a1a5",
               "name": "tom"
           }
        ],
        "index": [{ // 索引
            "IndexName": "index_a", // 索引名称
            "MgoKeySchema": { // 索引规则
                "MgoIndexKeys": [{
                    "Name": "index", // 索引字段
                    "Direction": "1" // 索引方向,1:ASC-升序,-1:DESC-降序
                }],
                "MgoIsUnique": false // 索引是否惟一
            }
        }]
    }
}
复制代码

uniCloud基本概念

服务空间

一个服务空间对应一整套独立的云开发资源,包括数据库、存储空间、云函数等资源。服务空间之间彼此隔离。

每一个服务空间都有一个全局惟一的space ID。将来会支持一个应用同时链接多个服务空间,届时须要在代码中声明space ID以告诉代码要链接哪一个云服务空间。

开发者可在 HBuilderX 中新建服务空间,以下:

服务空间 - 图1

或者在uniCloud的web控制台unicloud.dcloud.net.cn 建立服务空间。

开发者需先为项目绑定服务空间,而后才能上传云函数、操做服务空间下的数据库、存储等资源。

数据库

uniCloud提供了一个 JSON 格式的文档型数据库,数据库中的每条记录都是一个 JSON 格式的对象。一个数据库能够有多个集合(至关于关系型数据中的表),集合可看作一个 JSON 数组,数组中的每一个对象就是一条记录,记录的格式是 JSON 对象。

关系型数据库和 JSON 文档型数据库的概念对应关系以下表:

关系型 JSON 文档型
数据库 database 数据库 database
表 table 集合 collection
行 row 记录 record / doc
列 column 字段 field

更多云数据库介绍参考规范

云函数

云函数即在云端(服务器端)运行的函数。

开发者无需购买、搭建服务器,只需编写函数代码并部署到云端便可在客户端(App/H5/小程序等)调用,同时云函数之间也可互相调用。

一个云函数的写法与一个在本地定义的 JavaScript 方法无异,代码运行在云端 Node.js 中。当云函数被客户端调用时,定义的代码会被放在 Node.js 运行环境中执行。

开发者能够如在 Node.js 环境中使用 JavaScript 同样在云函数中进行网络请求等操做,并且还能够经过云函数服务端 SDK 搭配使用多种服务,好比使用云函数 SDK 中提供的数据库和存储 API 进行数据库和存储的操做,这部分可参考数据库和存储后端 API 文档。

开发者可在HBuiderX中,在cloudfunctions目录上右键、新建云函数,以下:云函数 - 图1

云函数修改后,需上传到云端,方可生效。

更多云函数介绍参考规范

相关文章
相关标签/搜索