随笔 - 46  文章 - 0 评论 - 0 阅读 - 15771

总结

  • 数据库的schema
    • 本地用于定义数据库结构
    • 定义好文件后如何影响云端数据库的结构?如果修改结构后需要数据迁移要如何处理?
    • 在DB Schema中提供了与uni-id的角色权限体系配套的数据权限控制方案
      • uni-id中可以配置角色的名称和等级
      • DB Schema可以通过角色的等级和uni-id表中的字段和目标表中字段进行比较,来控制某张表的增删改查权限
  • uniCloud推出了JQL(Javascript Query Language),会js即可掌握数据库查询,更对联表查询、Tree查询提供了非常简便的操作封装
    • JQL则提供了大量的运算方法,比如日期运算dayOfMonth()、字符串操作方法substr()、数字运算方法add()...可以对数据库字段的值直接进行运算和筛选
  • niCloud推出了opendb,包含了大量的开源数据库模板,常见数据表无需自己设计
    • 1
  • 体系(表结构、表操作JQL、云函数)
    • uniCloud提供了uni-id,无需自己开发账户体系,登录、注册、修改密码、角色权限体系、token管理一应俱全

https://doc.dcloud.net.cn/uniCloud/

什么是uniCloud

  • uniCloud推出了opendb,包含了大量的开源数据库模板,常见数据表无需自己设计
  • uniCloud推出了JQL(Javascript Query Language),会js即可掌握数据库查询,更对联表查询、Tree查询提供了非常简便的操作封装
    • 在数据库的schema中定义两个表的字段之间的关系,比如是引用关系(foreignKey)、还是父子关系(parentKey),前端就可以直接查询,轻松完成联表查询和tree查询
    • JQL则提供了大量的运算方法,比如日期运算dayOfMonth()、字符串操作方法substr()、数字运算方法add()...可以对数据库字段的值直接进行运算和筛选
  • uniCloud提供了uni-id,无需自己开发账户体系,登录、注册、修改密码、角色权限体系、token管理一应俱全
  • uniCloud在DB Schema中提供了与uni-id的角色权限体系配套的数据权限控制方案。
    • 注释:DB Schema是基于 JSON 格式定义的数据结构的规范。每张表/集合,都有一个表名.schema.json的文件,来描述表的信息、字段的信息。
  • uniCloud如何提升10倍开发效率图片内容注释
    • uForm 表单校验规范
    • DataCom 数据与ui的交互规范
    • ClientDB 免写服务端代码
      • 注释:js直接操作数据
    • UniPay 统一支付
    • uniAdmin 管理后台
      • 有众多admin插件,比如cms插件、push、banner管理插件、App升级管理插件
    • DBSchema2Code 自动生成代码
  • uniCloud如何提升10倍开发效率
    • 提供众多现成轮子,不用自己写代码
      • 云端一体生态:
        • 以用户模块为例,其实它有前端、也有云端。前端有注册、登录、修改密码等页面,云端有对应的逻辑代码和数据库。
      • uni-starter 云端一体应用快速开发基本项目模版,实现快速搭建一款应用。它集成了很多通用的功能,比如登录注册、头像、设置、拦截器、banner
      • uni-search 云端一体搜索。
      • uni-file-picker:前端直传uniCloud存储组件
      • uni-captcha:云端一体图形验证码组件
      • uni-sec-check:免费的内容安全审查,防止用户提交违法的文字或图片
      • uni-upgrade-center:App升级中心。支持整包升级、wgt热更新;支持直接下载安装包或跳转应用商店
        • 注释:WGT文件是HBuilderX(DCloud提供的开发工具)打包生成的一种资源包格式,它包含了应用的资源文件,如页面、图片、脚本等。当应用需要进行热更新时,只需要下载新的WGT文件并安装到现有应用中即可,这样就可以实现在不重启应用的情况下更新应用的内容。
      • uni-push2:云端一体的推送,大幅简化推送开发
      • uni-im:开源、多端IM
        • 备注:即时通讯
      • uni-cms:开源、多端内容管理
      • uni-ai:聚合ai能力
      • uni-map:地理位置开发中间件,极大加速地图业务开发效率
      • 还有大量的云端一体的项目模板
    • 如果没有现成轮子,那么用schema2code代码生成工具,生成数据库的增删改查页面(是直接生成页面,不是生成接口)
      • 为数据表编写schema,可以实现非常多功能:数据结构定义、权限管理、数据值域管理,以及非常神奇的功能
    • 如果schema2code搞不定,需要手写代码,那么使用clientDB,将节省80%的服务端开发工作
    • 如果仍然需要写云端代码,那么云对象让你的开发更简单
      • 云对象把云端的代码变成对象方式,让前端js直接import这个对象,然后使用这个对象的方法,就像使用前端的js对象一样顺畅。
    • HBuilderX在云端协同中提供工具助力

快速上手

  • 在uniCloud/cloudfunctions目录右键创建云函数/云对象
    • 云对象是云函数的一种,云函数可泛指普通云函数和云对象
  • HBuilderX自带一个云函数本地运行环境,运行项目时也默认选择 连接本地云函数。可以在底部控制台中的前端控制台右上角进行切换。
  • 在web控制台可以对数据库进行编辑 https://unicloud.dcloud.net.cn
    • 时间和地理位置,在编辑时有特殊的写法
  • 在web控制台添加/修改数据时,如果输入"2020-12-02 12:12:12"会变成字符串,而不是日期格式。此时需通过以下方式添加日期类型数据
{
  "create_date": {
    "$date": 1606910053154 // 添加此时间戳对应的日期对象作为create_date
  }
}
  • 将location字段设置为经度116、纬度38的地理位置点
{
  "location": {
    "type": "Point",
    "coordinates": [116,38]
  }
}

免费版和商用版

基本概念

服务空间

  • 若一个应用需要同时连接更多服务空间,HBuilderX中无法绑定更多服务空间。此时需开发者在客户端代码中,手动调用初始化方法uniCloud.init,连接其他服务空间
  • uniCloud.init方法会返回一个uniCloud实例,之后云函数API的调用都需要通过该uniCloud实例发起(类似实例调用)。
  • 云函数会自动识别自己所属的服务空间,调用本服务空间下的资源时无需初始化。
  • 云函数环境(仅腾讯云支持)仅能通过init返回同账号下其他的腾讯云服务空间实例。
  • 客户端环境(腾讯云、阿里云均支持)可以通过init返回本账号下任意云厂商服务空间实例

数据库

  • uniCloud 提供了 2 个 nosql 数据库
    • JSON文档型云数据库
      • 数据库中的每条记录都是一个 JSON 格式的对象
      • 一个数据库可以有多个集合(相当于关系型数据中的表),集合可看做一个 JSON 数组,数组中的每个对象就是一条记录,记录的格式是 JSON 对象。
    • redis 数据库
      • redis 是一种可以运行在内存中的键值对数据库,它的能力没有MongoDB强大,但由于可运行在内存中,它的性能远超常规数据库。
  • 如果开发者需要其他数据库,比如 mysql、ElasticSearch、数据湖,这些数据库没有在uniCloud的服务空间内置,云函数中通过 nodejs 的 api 可以访问这些远程数据库。
    • 注释:ElasticSearch 分布式搜索和分析引擎,就是es
    • 注释:数据湖是一种存储大量原始数据的系统或存储库,这些数据可以是结构化的(如关系型数据库中的表)、半结构化的(如CSV、JSON、XML文件)或者非结构化的(如文本、图像、音频和视频文件)
  • 如果是业务方面的mysql,建议通过uniCloud web控制台数据导入或通过云函数将mysql数据导入到uniCloud的云数据库中,这样速度比连接远程mysql数据库要更快, 并且可以使用jql、clientDB等一系列uniCloud提供的数据库操作技术。uniCloud庞大的生态如uni-id、uni-admin也都只支持uniCloud云数据库

云函数/云对象

  • 云函数之间也可互相调用
  • DCloud提供了 uniCloud对象 内置在云函数/云对象中,开发者使用更多的是 uniCloud 的 api,不了解 node 不影响开发。
  • HBuilderX 3.0起版本,在uniCloud/cloudfunctions目录右键创建云函数
  • 云函数修改后,可以本地运行

云函数/云对象

综述

  • uniCloud的云函数环境内置了uniCloud对象,这个对象内置了网络、数据库等各种API。
    • uniCloud扩展库:为了裁剪和控制云函数体积而设计的,一些不太常用的功能比如Redis,独立为可选扩展库,避免增大每个云函数的体积
  • 每个云函数是一个目录,其中普通云函数有index.js入口文件,云对象的入口文件则是index.obj.js
    • 一个最简单的云函数只需要这个入口js文件,在里面编写代码即可。当然也可以在这个js中require该云函数目录下的其他js、json文件
  • 云函数的配置文件和 npm规范 相同,在云函数目录下可新建一个 package.json 来存放配置。
  • 云函数启动后实例会保留一段时间(如15分钟),超过保留期后若该云函数一直没有被再调用,那这个实例会被释放。所以云函数有冷启动的概念。
    • 不过由于js实例的启动要比php和java更快,所以js更适合serverless方式。
  • 云函数内使用commonjs规范,不可使用import、export
  • 不同项目使用同一个服务空间时,不可使用同名云函数。同名云函数会相互覆盖。
  • 单个云函数大小限制为10M(包含node_modules),过大的云函数影响运行性能,也会增加计费的gbs。
    • 支付宝云与腾讯云支持在云端安装node_modules,此时不占用云函数体积。
  • uniCloud的阿里云版与支付宝云版,暂不可使用相对路径读取文件(比如fs.readFileSync('./info.txt')),可以使用绝对路径fs.readFileSync(path.resolve(__dirname,'./info.txt'))
  • 云函数:客户端使用uniCloud.callfunction("")调用云函数
  • 云对象:是通过前端导入对象来操作的,客户端使用uniCloud.importObject("")导入云对象
  • 公共模块:用于不同的云函数/云对象,抽取和共享相同代码
  • uniCloud体系里,客户端和服务端的云函数通信,有4种方式
    • 传统的restful方式
      • 通过配置云函数URL化,把云函数转为传统的http链接
      • http链接需要自己注册域名。如果前端是uni-app,则不推荐使用URL化。如果是非uni-app的系统需要访问云函数,只能使用URL化
    • callfunction方式
      • uni-app客户端通过uniCloud.callFunction(functionname)来调用云函数
      • 相比云函数URL,callfunction更加安全、更serverless,不暴露域名和ip,不怕攻击,也无需注册域名
    • 云对象方式
      • uni-app客户端通过uniCloud.importObject(objectname)导入一个云对象,直接使用这个对象的方法
      • uni-app 3.4起支持
      • 云对象针对的场景是非数据库操作或不宜前端暴露的数据库操作时,和uni-app客户端的通信方式
    • clientDB方式
      • uni-app客户端通过<uniCloud-db>组件或uniCloud.database() API来访问uniCloud数据库。
      • 不适用的情况
        • 数据库表和字段数量多而接口数量少。给每个数据配置权限的工作量超过了控制少数接口权限的工作量
        • 权限体系非常复杂,除了用户和管理员外还有较多其他权限条件或动态权限。此时在schema.json/schema.ext.js中编写代码的复杂度超过了写接口。
  • 在HBuilderX 3.5.2之前,需要URL化和定时运行时,只能使用普通云函数;在HBuilderX 3.5.2+,云对象也支持了URL化和定时运行
  • 可以让云函数/云对象生成一个HTTP URL。这样非uni-app应用,可以通过ajax请求和云函数/云对象通信。
    • 在 uniCloud Web控制台进行URL化配置。
  • 云函数在执行期间可以将中间状态发送给客户端
    • 注释:长时间运行的云函数可以主动向客户端推送状态,在常规web开发时可以使用server sent event将结果分段返回,客户端自行组装最终结果。但是小程序端并不支持server sent event,因此我们基于uni-push实现了这个替代方案。
  • uniCloud响应体规范
    • uniCloud响应体规范(uniCloud response format),是DCloud制定的、服务器给客户端返回json数据的一种建议格式
    • 云对象、clientDB、uni-id公共模块均支持此规范
    • 与uni-app前端的API错误回调风格统一,uniCloud响应体规范定义的云端返回信息(尤其是报错时)应包含errCode和errMsg
    • errCode在成功时应返回数字0,失败时应返回一个以插件id开头的“字符串”,每个单词以连字符(-)分割
    • 后续uniCloud会提供自动根据errCode对errMsg进行国际化处理的功能,开发者仅需保证云函数返回值满足uniCloud响应体规范即可
    • 除此之外响应体规范还包含newToken字段,用于token的自动续期(云对象接收含有newToken的响应后会自动更新storage内存储的uni_id_token及uni_id_token_expired,此行为新增于HBuilderX 3.4.13)
    • 开发者仅在自行调用uni-id-common的checkToken等会产生新token的接口时才需要返回新token,uni-app客户端和uni-id-co之间会自动管理token及续期
  • HBuilderX 3.6.10及之后版本的错误规范
  • HBuilderX内使用代码块returnu可以快速输入以下代码(HBuilderX 3.4.0及以上版本)
  • 云函数环境中内置了uniCloud对象,扩展了一批新API
    • uniCloud.database() 云数据库对象
    • uniCloud.databaseJQL() 云函数中使用JQL语法操作数据库 详见,需添加扩展库
    • uniCloud.redis() 使用redis 详见,需添加扩展库
    • uniCloud.uploadFile() 云函数上传文件到云存储
    • uniCloud.downloadFile() 云函数下载云存储的文件到云函数运行环境
    • uniCloud.deleteFile() 云函数删除云存储的文件
    • uniCloud.getTempFileURL() 获取云存储文件的临时路径
    • uniCloud.customAuth() 使用云厂商自定义登录,仅腾讯云支持
    • uniCloud.callFunction() 云函数/云对象中调用另一个云函数
    • uniCloud.importObject() 云函数/云对象中调用另一个云对象
    • uniCloud.httpclient 云函数中通过http访问其他系统
      • uniCloud.httpclient返回的是一个urllib实例
    • uniCloud.httpProxyForEip 使用云厂商代理访问http服务(阿里云的解决微信需要固定IP的方案),仅阿里云云端环境支持 详见,新增于HBuilderX 3.5.5
    • uniCloud.sendSms() 发送短信,需添加扩展库
    • uniCloud.getPhoneNumber() 获取一键登录手机号,需添加扩展库
      • 注释:通过token,获取客户端一键登录时使用的手机号
    • uniCloud.init() 获取指定服务空间的uniCloud实例
    • uniCloud.logger 云函数中打印日志到uniCloud web控制台的日志系统
    • uniCloud.getRequestList 获取当前云函数实例内正在处理的请求Id列表
    • uniCloud.getClientInfos 获取当前云函数实例内正在处理的请求对应的客户端信息列表
    • uniCloud.getCloudInfos 获取当前云函数实例内正在处理的请求对应的云端信息列表
  • 云函数调用uniCloud接口时(包括请求云函数、云对象、云存储等)可能存在抛出错误的场景,此时会抛出uniCloud标准的错误对象(以下记为uniCloudError)
    • errCode 错误码
    • errMsg 错误信息
    • requestId 请求Id,用于排查错误
    • detail 仅云对象主动返回错误对应的响应体规范时会有此属性
  • uniCloud.httpclient.request(URL,requestOptions)
    • requestOptions参数说明
      • content 手动设置请求的payload,设置后会忽略data
        • 注释:payload是指请求体
      • stream 发送请求正文的可读数据流
        • 注释:传入fs方法读取的文件,用于节省内存,把文件转为流分批传出
      • writeStream 接受响应数据的可写数据流
        • 同上:传入fs方法读取的文件,用于节省内存,把响应返回的数据保存到文件中。
posted on   噬蛇之牙  阅读(124)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示